引言 消失的pdf印章
最近在做pdf的预览和打印,用的前端插件vue-pdf进行预览,遇到一个怪问题,就是有些pdf的印章莫名其妙的消失了,一开始非常困惑,就在想同样都是印章,为啥有些pdf的印章在,单单这些pdf印章不见了,难道这些消失了的pdf印章有特殊之处;果不奇然,它们真的有特殊之处的,它们是电子签名印章,那么为啥电子签名印章就得消失呢,我一看vue-pdf的源码,这个源码也是基于pdfjs这个库写的,于是我又去pdfjs阅读源码,才恍然大悟,pdfjs有一行代码,决定了签名印章必须消失;笔者也不知道为啥pdfjs的作者为啥一定要让签名印章消失不见。
解决的方法
问题找到了,但是应该怎么解决呢,如何在不更改依赖库进行大改动的前提下,如何更改pdfjs文件里面的代码,有以下几种途径可以考虑;
- 给依赖包提issue等待他人修复并发布;
- 给依赖包提pr自行修复并且等待通过;
- 直接copy依赖包的源码,本地引用,不再通过npm包方式引用
- 发布自己的私库,修改pdfjs源码,然后发布到自己的私有仓库上
- 升级pdfjs的版本,据说高版本的pdfjs已经解决了这个问题了,小编还没有试过,小伙伴如果真实遇到这个问题,可以自行升级到最新版本的试一试 上述解决方法小编都觉得不太合适自己,直到我看到package-patch,一个可以给第三方工具包打补丁工具库;
package-patch如何使用
那么,package-patch该如何使用呢,小编给大家整理了一下使用步骤
1安装
npm i patch-package
2更改node_modules
文件夹中要修改依赖包的文件,找到node_module下pdfjs-dist/build/pdf.worker.js文件,将里面的_this2.setFlags(_util.AnnotationFlag.HIDDEN)注释掉;
3生成补丁
npx patch-package pdfjs-dist
执行完这个命令,在我们的工程里面会自动生成一个名为pacthes的文件目录,如下图所示:
添加自动执行命令
执行以上步骤后,本项目的补丁已经完成修复,pdf已经能看到签名的印章了,但是如何让更改内容在团队其他同事拉取代码后执行? 这就需要我们添加自执行命令如下,会在 npm install 后知执行。
总结
根据上述步骤完美解决了这次pdf预览签名印章不展示的问题,不过直接修改 node_modules 下的代码不是被推荐的做法,应该仅在应急情况下考虑长期还是需要彻底修复第三方包缺陷并逐步移除项目中的 .patch 文件