当前位置: 首页 > article >正文

解决vue-pdf的签章不显示问题

在使用vue-pdf @4.3.0时发现上传一般的普通pdf正常预览,但是上传带有红头文件的和和特殊字体的pdf无法正常内容显示,文字丢失问题。

1、查看控制台报错信息

2、缺少字体原因

    getNumPages(url) {
      var loadingTask = pdf.createLoadingTask({
         url: url,
         //引入pdf.js字体
         cMapUrl: 'https://cdn.jsdelivr.net/npm/pdfjs-dist@4.8.69/cmaps/',
         cMapPacked: true
      });
      this.url = loadingTask;
      loadingTask.promise.then((res) => {
        this.numPages = res.numPages;
      })
    }

3、vue-pdf 是依赖于 pdfjs-dist 库的,而它依赖的pdfjs-dist库的版本不支持显示签章

在 node_modules/pdfjs-dist/es5/build/pdf.worker.js 发现有这么一段代码:

if (data.fieldType === 'Sig') {
  data.fieldValue = null;
 
 // _this3.setFlags(_util.AnnotationFlag.HIDDEN);
}

其中 _this3.setFlags(_util.AnnotationFlag.HIDDEN)就是隐藏电子签章,注释这段代码去修复这个问题了。

4、生产环境同步去修改,用到另一个插件 patch-package 

它的作用就是打补丁, 当某些模块有bug的时候, 先在依赖包修改,在执行以下命令

npm install patch-package

npx patch-package pdfjs-dist

执行后会在项目根目录生成patches文件


同时你也要在 package.json 的脚本scripts中添加 

"scripts": {
    ...
    "postinstall": "patch-package"
 },

后续执行 npm install 时,会自动为依赖包打补丁


5、worker-loader 的默认打包路径是在 dist 根目录下,为了统一我们想把它打包到 dist/static/js 目录下,我们依旧通过更改源码的方式是设置路径。

找到 node_modules/worker-loader/dist/index.js 文件,然后把:

const filename = _loaderUtils2.default.interpolateName(this, options.name || '[hash].worker.js', {
    context: options.context || this.rootContext || this.options.context,
    regExp: options.regExp
});

改为我们想要的路径

const filename = _loaderUtils2.default.interpolateName(this, options.name || 'static/js/[hash].worker.js', {
  context: options.context || this.rootContext || this.options.context,
  regExp: options.regExp
});

最后,再运行 npx patch-package worker-loader,生成worker-loader+2.0.0.patch补丁包


http://www.kler.cn/a/405751.html

相关文章:

  • 三层交换机静态路由实验
  • 日常开发记录-正确的prop传参,reduce搭配promise的使用
  • 云原生之k8s服务管理
  • el-table最大高度无法滚动
  • Transformer中的Self-Attention机制如何自然地适应于目标检测任务
  • NVR录像机汇聚管理EasyNVR大华NVR管理平台:深耕视频监控市场的多元化兼容
  • unity3d——基础篇2刷(三角函数)
  • 如何使用Jest测试你的React组件
  • 金融量化交易:技术突破与模型优化
  • HTML5 SVG
  • 力扣面试题 - 24 插入
  • Node.js笔记(四)局域网聊天室2:服务端接受客户端消息
  • PostGIS分区表创建
  • 探索 Python 字典的奥秘:Future 对象为何能成为字典的键?
  • 【UE5】Slider控件样式
  • 【ubuntu24.04】安装mongodb社区版本
  • 14.C++STL1(STL简介)
  • 标题gitLab如何打标签
  • DASCTF 2024 10月 Reverse 完成笔记 附题目
  • 红帽RHCSA认证怎么报名?红帽初级认证报考指南!
  • 【单点知识】基于PyTorch讲解自动编码器(Autoencoder)
  • 【数据分享】中国价格统计年鉴(2013-2024) PDF
  • 区块链安全常见的攻击——自毁漏洞(Self-Destruct Vulnerability)【2】
  • C++
  • Vue3 使用v-for 渲染列表数据后更新
  • SQLSever显示物理和逻辑 IO活动量的相关信息及显示分析、编译和执行各语句所需的毫秒数。