重点提示:全网通用pdf查看的功能都是使用vue-pdf这个插件,除了各种坑外,最致命的一点就是,它的npm包有一个Bug,在第一次查看之后,再次查看,页面会空白并报错:Error during font loading: Failed to execute 'postMessage' on 'Worker': ArrayBuffer at index 0 is already detached,这个报错如果不知道原因,去百度就如大海捞针,以下就是各种问题出现场景+解决方案。

致命坑原因分析:引入了CMapReaderFactory导致,通过动态import PDF的语言文件实现解决中文显示的问题,但是第二次加载PDF的时候页面是空白页,在你第一次加载PDF的时候,bcmap的返回值是Uint8Array[43366]的数组对象,而第二次预览PDF加载时发现bcmap的返回值是Uint8Array []的空数组,是因为缓存问题,第二次加载时取的是初次加载PDF文件时的语言文件的loadModules的缓存,但是取的过程中导致了失败,返回了空值,所以CMapReaderFactory代码应该加上一行:delete require.cache[require.resolve('./buffer-loader!pdfjs-dist-sign/cmaps/'+query.name+'.bcmap')];vue-pdf-signature这个包,为已经更改并发布到npm的新包,项目中可以直接使用。

为了更好兼容及必坑,弃用原本vue-pdf插件,替换为vue-pdf-signature,安装及使用如下:

1.安装依赖

npm install --save vue-pdf-signature

2. 页面使用

<pdf v-for="i in numPages" :key="i" :src="pdfSrc" :page="i" frameborder="0"></pdf>import pdf from 'vue-pdf-signature'
// 中文PDF加载空白引入依赖
import CMapReaderFactory from 'vue-pdf-signature/src/CMapReaderFactory.js'data() {return {numPages: 1,pdfSrc: ''}
},this.$on('show', (url) => {// 1.解决中文PDF加载空白并报错:Warning: Error during font loading: The CMap "baseUrl" parameter must be specified, ensure that the "cMapUrl" and "cMapPacked" API parameters are provided.解决办法:this.pdfSrc = pdf.createLoadingTask({ url: url, CMapReaderFactory })// 3.解决PDF存在分页,进行分页加载pdf.createLoadingTask(url).promise.then(pdf => {this.numPages = pdf.numPages})
})

CMapReaderFactory文件查看地址: node_modules/vue-pdf-signature/src/CMapReaderFactory.js vue-pdf-signature包更改后,正确代码:

新增代码: 其余不变

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

项目运行后,会报错编译失败:

是因为core-js版本不兼容,继续安装包:cnpm install core-js@2,到此完美解决

原创参考: 原文链接:blog.csdn.net/chenzhiyong…

end...

vue-pdf使用+分页预览+第一查看正常,第二次查看空白解决方案相关推荐

  1. vue pdf下载及预览(移动端)

    本文使用的是 vue-pdf,其实还有其他的很多比如pdf.js,只不过觉得这个和vue结合了应该不用下载一堆东西,直接npm install就可以,所以采用vue-pdf来撰写pdf下载及预览. 无 ...

  2. vue pdf文件下载 / 在线预览真是有效!

    1.pdf下载 首先说下下载问题, 通过文件地址下载 存留问题 无法下载 试过a标签搭配文件地址下载,最后发现行不通,一点击下载就直接打开了,不符合需求. 通过文件流形式,完美解决, 这里通过后端把文 ...

  3. fis3+vue+pdf.js制作预览PDF文件或其他

    人生第一篇博客,的确有点紧张,但有些许兴奋,因为这对于我来说应该是一个好的开始,以此励志在技术的道路上越走越远. 看过了多多少少的技术博客,给自己带来了很多技术上的收获,也因此在想什么时候自己也可以赠 ...

  4. vue-pdf+element实现全屏窗口pdf分页预览,pdf打印实现和解决打印乱码

    一.源码 vue-pdf打印实现和乱码解决https://download.csdn.net/download/lucky_fang/85498529 二.全屏窗口打印预览效果 分页预览pdf 窗口采 ...

  5. Vue中使用pdfJs预览PDF、图片

    Vue中使用pdfJs预览PDF.图片 pdf.js是一个使用HTML5构建的可移植文档格式库.它可以帮助我们在浏览器中构建pdf文档,实现在线查看pdf文件的功能. 实现步骤如下: 1.下载pdfJ ...

  6. vue项目实现前端预览word和pdf格式文件

    最近做vue项目遇到一个需求,就是前端实现上传word或pdf文件后,后端返回文件对应的文件流,前端需要在页面上展示出来.word预览简单一些,pdf预览我试过pdfjs,vue-pdf总是报各种奇奇 ...

  7. vue 实现pdf文件在线预览

    PDF文件在线预览的功能相信大家都是有遇到过的,这边有两种实现方法,大家可以借鉴参考下 第一种,使用vue-pdf 安装 npm install --save vue-pdf 页面代码 <tem ...

  8. vue+iview 内网预览(本文重点)+外网预览word、excel、pdf、ppt

    访问内网文件思路如下: 1.后端将word.excel.pdf文件转为二进制文件流 前端将文件流转为html从而实现文件预览 2.pdf没这么复杂具体可看下文 3.ppt的实现方式是后端将ppt转为p ...

  9. vue移动端文件预览

    vue移动端文件预览 前言: 整体思路: 具体实现: 一.外壳(vViews.vue): 二.文件预览: 1.图片预览: 2.pdf文件预览: 3.docx文件预览: 4.excel表格预览(xls. ...

最新文章

  1. c语言作业扩展名通常为什么,C语言的源程序通常的扩展名是( )
  2. Python内置方法
  3. java 8 lambda 排序_Java8 用Lambda表达式给List集合排序的实现
  4. SpringBoot声明式事务
  5. 如何解决 IDEA 占用大量 CPU 导致的卡顿问题?这顿操作猛如虎
  6. 图片旋转 rotate
  7. 转载一篇短小精悍的博文:强可学习在什么条件下与弱可学习等价
  8. 最酷的程序员应该知道的【LLVM】!
  9. php实现无限极分类算法,php实现无限极分类
  10. vue.js 首屏优化
  11. DSP课设项目(ICETEK-VC5509-EDU)
  12. qt如何编写android程序,如何利用Qt开发Android应用程序
  13. 聚类分析入门(理论)
  14. 服务器 支持sata硬盘,服务器SAS硬盘背板能插SATA硬盘吗?
  15. INTERVAL 用法
  16. 高考30条干货分享!去哪能找到高质量2021高考学习资源?
  17. 从零开始的Node.js新闻爬虫实验项目(四)东方财富网、网易新闻、Pixiv的爬取思路
  18. 【色彩管理】锐印添加ICC曲线教程
  19. 国科大计算机应用技术导师,北京航空航天大学计算机学院计算机应用技术导师介绍:吴威...
  20. git rebase的两种用法(最全)

热门文章

  1. SpringCloud服务治理Eureka(理论)
  2. js中toString用法
  3. 【写文工具】常用文字表情
  4. 西普实验吧CTF-约瑟夫环
  5. android 颜色 数组,在Android中声明维数,颜色,资源ID或其他非标准数据类型的数组?...
  6. PID算法实现及参数整定图解(附代码)
  7. objective-c复制
  8. Oracle中的日期和字符串互相转换以及格式化
  9. oracle 转换为double,Oracle中的类型转换 (转)
  10. Android 集成百度地图之申请TTS授权最新版