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

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

1、查看控制台报错信息

2、缺少字体原因

javascript 复制代码
    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 发现有这么一段代码:

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

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

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

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

javascript 复制代码
npm install patch-package

npx patch-package pdfjs-dist

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


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

javascript 复制代码
"scripts": {
    ...
    "postinstall": "patch-package"
 },

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

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

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

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

改为我们想要的路径

javascript 复制代码
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补丁包

相关推荐
Ken_11152 小时前
小体积附件下载正常,大附件下载异常
javascript
变与不变8062 小时前
jQuery怎么使用
前端·javascript
paopaokaka_luck2 小时前
流浪动物救助与收养系统(DeepSeek AI对话、 ECharts多维分析、救助流程衔接、领养与回访衔接、 捐赠确认与公示、志愿者协作)
java·前端·javascript·人工智能·mysql·echarts·推荐算法
仰望.3 小时前
vue 表格组件 vxe-table 树表格懒加载支持拖拽排序的详细用法
前端·javascript·vue.js·vxe-table
程序员初一5 小时前
我把跑了两年 WordPress 的机器重装了一遍,顺便把面板卸了
javascript
kyriewen5 小时前
别再用防抖做懒加载了:120 张图只加载出 4 张
前端·javascript·程序员
CodeMi6 小时前
2026 CSS 接管了这些 JS 的活:6 个 Baseline 特性的落地取舍
javascript·css
康小旺7 小时前
AI 写 Vue 总写成同一个味道:给它装 Skills,装的不是知识是边界
vue.js·typescript
全栈项目管理程序猿7 小时前
ArcGIS JS 基础教程(35):体元系列 - VoxelLayer 时间维度动画
前端·javascript
惠惠软件8 小时前
PDF加盖骑缝章标注工具,PDF 文档上批量添加骑缝章或盖章的小工具
数据库·pdf·办公文件