• 使用pdf.js开发一个图书在线阅读界面,可以点击书签显示对应的页面,可以全文检索


    客户现场问题:图书pdf文件单个超过1G的文件很多,在线加载pdf文件特别慢,半天都加载不出来,所以需要在线阅读功能进行重构

    解决办法:

      一、后台处理

          1、首先使用itext-pdf对pdf文件进行书签抽取,对抽取出的书签保存到书签表,书签表里会有书签名称、页码、层级关系等字段,然后对书签使用ES创建索引

          2、对pdf文件进行按页拆分,拆分成多个pdf文件,拆分使用cpdf-binaries-master工具,下载地址:https://github.com/coherentgraphics/cpdf-binaries

        3、抽取单页PDF文件的文本内容,使用ES生成全文索引

          二、前台阅读界面

    1、 左侧是书签列表,用ztree展示;中间是图书展示,用的pdf.js,界面上面的按钮是应客户要求,做了修改;右侧是检索模块。

    2、点击左侧书签,会显示对应的图书页面,拆分后的单页pdf文件名称会以页码标识,这样书签就和单页pdf关联起来了。

    这样就解决了加载速度慢的问题!

    三、下面说下前台阅读界面开发碰到的问题

    1. 当前设定一次缩放大小后点击另一个书签默认大小,能否改成设定一次后不变

      这是因为每次点击另外个书签,都是个新的pdf,缩放比例默认都是自动缩放

      解决:直接在pdf.js的viewer.html文件里修改代码

      var $autoScale=$('#autoScale',window.parent.document);//在iframe标签外部页面定义,记录当前pdf缩放比例
      var $searchKey=$('#key',window.parent.document);//全文检索的关键词
      var isReloadPage=false;//是否重新加载页面
      window.addEventListener('scalechange',function (event) {
    /**
    * pdf渲染界面查找出关键词并且高亮显示
    */
    var PDFFindBar = PDFViewerApplication.findController.findBar;
    var searchKey=$searchKey.val();
    PDFFindBar.findField.value = searchKey;
    PDFFindBar.highlightAll.checked= true;
    PDFFindBar.findNextButton.click();
    //end

    /**
    * pdf翻页缩放比例保持不变
    */
    autoScale=$autoScale.text();
    if(!autoScale){
    $autoScale.text(PDFViewerApplication.currentScaleValue);
    }
    if(PDFViewerApplication.currentScaleValue == 'auto' && isReloadPage == true){
    $autoScale.text(PDFViewerApplication.currentScaleValue);
    return;
    }
    if(PDFViewerApplication.currentScaleValue == 'auto'){
    PDFViewerApplication.pdfViewer.currentScaleValue=autoScale;
    }
    if(autoScale != PDFViewerApplication.currentScaleValue){
    $autoScale.text(PDFViewerApplication.currentScaleValue);
    }
    isReloadPage=true;



    });

    2、原文界面全文检索的关键词没有高亮显示
      说明:这个问题是点击全文检索,会在右侧把检索出的全文数据以表格的形式展示,展示字段有书签名称、检索出的内容。然后点击对应的检索内容,中间显示对应的pdf
      解决:上面代码以解决
    3、使用ztree,树形节点文本不能自动换行
    <style>
    /*设置ztree节点span自动换行*/
    .ztree li span{
    white-space: normal;
    display: inline-block;
    margin-right: 10px;
    }
    /*设置ztree节点a标签高度设置为自动*/
    .ztree li a{
    height: auto;
    }

    /*设置ztree节点被选中时高度设置为自动*/
    .ztree li a.curSelectedNode{
    height: auto;
    }
    </style>

      

  • 相关阅读:
    海量文件查重SimHash和Minhash
    刷题中熟悉Shell命令之Tenth Line和Transpose File [leetcode]
    C# 开发XML Web Service与Java开发WebService
    Sketchup+ArcGIS三维建模与管理
    入门-Arcmap网络分析示例
    建议入门-用ArcMap进行空间查询与空间连接
    (转载)Htmlparser Filter 简要归纳
    (转载)java常见的ClassNotFoundException
    C# WinForm程序向datagridview里添加数据
    oracle数据库的简单操作
  • 原文地址:https://www.cnblogs.com/gaoruideboke/p/13891852.html
Copyright © 2020-2023  润新知