1. 问题的发生:
生产上的查看pdf功能一直好好的,使用的是pdfh5插件实现。 但是某天查看发票pdf显示不全面,于是找了后端看数据的返回,在浏览器上可以正常打开,证明返回的资源没问题,那么一定是前端部分出现了问题。
2.解决方案
2.1 更换cMapUrl链接
排查后发现,pdfh5在请求https://www.gjtool.cn/cmaps/UniGB-UCS2-H.bcmap的资源时超时了。上了pdfh5的github上查看,发现已经两年没维护了,同时issue里也有很多人遇到类似的问题,初步排查可能是pdfh5请求该字体资源的证书过期了。
解决方案:直接配置新的cmapurl链接就好了:
this.pdfh5 = new Pdfh5('#pdf-contain', {
pdfurl: url,
cMapUrl: 'https://unpkg.com/pdfjs-dist@2.0.943/cmaps/'
})
如果配置了如上cmapurl但是某些字体显示不了可以使用如下cMapUrl
cMapUrl: 'https://cdn.jsdelivr.net/npm/pdfjs-dist@2.5.207/cmaps/'
但即使配置了cMapUrl依然在请求该资源的时候还是有点慢,为了优化,尝试采用另外一个pdf插件vue-pdf解决问题。
2.2 使用新插件vue-pdf提升体验
在使用vue-pdf的过程又遇到了各种坑,如下:
坑1: css资源解析报错
在按照官方文档配置完后,打包发现报如下错误:
ERROR in ./node_modules/vue-pdf/src/vuePdfNoSss.vue 1:0 Module parse failed: Unexpected token (1:0)