• vue-pdf(v4.3.0)


    一、安装

    GitHub地址

    npm install vue-pdf

    此插件生成的worker.js文件路径需要注意一下,可能需要打补丁,见此文档vue-pdf 打包后[hash].worker.js路径问题—打补丁_Lambsbaa的博客-CSDN博客

    二、属性

            1、src pdf文件地址

            2、page 当前页

            3、rotate 旋转角度

    三、支持的事件

            1、error(err) 

                    参数:错误

            2、page-size(width,height,scale) 这个是文档中未提及的一个事件

                    参数:在pdf文件的某页渲染完成后,其宽度、高度、缩放比,可根据这些值倒推出原文件的实际尺寸

            3、link-clicked(pageNumber)

                   参数:当前页码,单击内部链接时触发

            4、page-loaded(pageNumber)

                    参数:当前页码,当前页加载完成时

            5、num-pages(numPages)

                    参数:当前文件的页数

            6、password(updatePassword,reasonStr)

                    参数:pdf密码、需要密码/错误密码的原因

            7、progress(ratio)

                    参数:进度条,值在0-1区间

            8、loaded

                    无参数,整个pdf文件加载完成时调用

    四、公共方法

            1、print(dpi,pageList)

                    参数:dpi是文档的打印分辨率(默认100);pageList是要打印的页面列表(数组)

    1. //全部打印
    2. this.$refs.pdf.print()
    3. //部分打印
    4. this.$refs.pdf.print(100,[1,2])

            2、createLoadingTask(src[,options])

                    参数:src即pdf文件地址(src不一定是指url,见CMapReaderFactory的使用情况下); options即配置对象,创建一个PDFJS加载任务,可作为src树形使用和重用。这个任务是一个promise,通过numPages属性的pdf文档进行解析。

            3、beware

                    当组件被销毁时,createLoadingTask()返回的对象将无效。

            4、onPassword

                    打开受密码保护的PDF时调用的回调

            5、onProgress

                    返回加载进度的回调

                    有些pdf文件的中文内容不显示时,可使用createLoadingTask,设置一下字体,这种情况下@progress的方式无效,需要改为向createLoadingTask内传配置项onProgress的方式。 

    网上搜的都是这种方法,但短暂出现了一下,后面咋都不出来了,不知道咋回事。。。有知道的大佬帮忙解答一下么

    后面就是用了【五、常见问题】里的方式解决了       

    1. this.fileUrlWithToken = pdf.createLoadingTask(res.body,{
    2. cMapUrl: 'https://unpkg.com/pdfjs-dist@2.0.943/cmaps/',
    3. cMapPacked: true,
    4. onProgress:(status)=>{
    5. console.log("xxxxx",status)
    6. this.loadedRatio = status.loaded / status.total
    7. console.log('进度',this.loadedRatio)
    8. },
    9. })

            6、withCredentials

                    在提起请求中是否发送cookies

    五、常见问题

            1、中文字体的一些pdf文件中中文内容不显示

    解决办法:我使用了createLoadingTask+CMapReaderFactory.js,设置了字体链接。

                    1.1、首先引入CMapReaderFactory

    import CMapReaderFactory from 'vue-pdf/src/CMapReaderFactory.js';

                    1.2、使用createLoadingTask方法,此处的src就是个对象{url,CMapReaderFactory}。这个是翻了源码发现的,见下下图

    1. let url = res.body;
    2. // 某些pdf文件的字体缺少,导致内容为空
    3. this.fileUrlWithToken = pdf.createLoadingTask(
    4. // src
    5. {
    6. url,
    7. CMapReaderFactory,
    8. },
    9. // options
    10. {
    11. onProgress: e => {
    12. this.loadedRatio = e.loaded / e.total
    13. },
    14. });
    1. function createLoadingTask(src, options) {
    2. var source;
    3. // 此处判断了src是字符串、数组、对象等情况
    4. if ( typeof(src) === 'string' )
    5. source = { url: src };
    6. else if ( src instanceof Uint8Array )
    7. source = { data: src };
    8. else if ( typeof(src) === 'object' && src !== null )
    9. source = Object.assign({}, src);
    10. else
    11. throw new TypeError('invalid src type');
    12. // source.verbosity = PDFJS.VerbosityLevel.INFOS;
    13. // source.pdfBug = true;
    14. // source.stopAtErrors = true;
    15. // 支持的事件
    16. if ( options && options.withCredentials )
    17. source.withCredentials = options.withCredentials;
    18. var loadingTask = PDFJS.getDocument(source);
    19. loadingTask.__PDFDocumentLoadingTask = true; // since PDFDocumentLoadingTask is not public
    20. if ( options && options.onPassword )
    21. loadingTask.onPassword = options.onPassword;
    22. if ( options && options.onProgress )
    23. loadingTask.onProgress = options.onProgress;
    24. return loadingTask;
    25. }

                    1.3、因为二次打开这种文件,页面仍然会空白,是因为缓存的原因,arry从有值变成无值。所以在每次打开前都清一下缓存。

     红框内代码如下:

    delete require.cache[require.resolve('./buffer-loader!pdfjs-dist/cmaps/'+query.name+'.bcmap')];

    之后执行一下打补丁的命令(前提是已经安装过patch-package,并在package.json中增加了"postinstall": "patch-package")。可参考vue-pdf打补丁

    npx patch-package vue-pdf

  • 相关阅读:
    matplotlibzzz颜色和双划线设置
    Day 93
    C语言常考面试基础问题
    Java基础(第七期):Java面向对象和类 && 类的封装 &&Java构造器 && JavaBean标准
    【数据结构】链表经典oj
    连接器使用四大注意要点
    Shell之wc命令
    正则表达式replaceFirst()方法具有什么功能呢?
    从一到无穷大 #16 ByteSeries,思考内存时序数据库的必要性
    ASEMI快恢复二极管ES5JB参数,ES5JB特性,ES5JB机械数据
  • 原文地址:https://blog.csdn.net/u010911649/article/details/126320661