为什么火狐浏览器的PDF.js内置阅读器无法正确显示发票的电子签章?
来源:互联网
时间:2026-06-07 09:06:04
火狐浏览器内置的PDF.js阅读器,在处理发片电子签章时有一个“小脾气”——默认会把类型为
【Sig】

要解决这个问题,得先从PDF.js的启用状态确认起。在地址栏输入 about:config,点“接受风险并继续”,搜 pdfjs.enabled,确保值为 true;再搜 pdfjs.disabled,确保值为 false。这两个参数只要有一个是 false 或未定义,PDF.js就没启动,后面的所有修复都是白忙一场。
定位并修改pdf.worker.js中的签名隐藏逻辑
电子签章不显示的根源,藏在
pdf.worker.js
方法一:直接注释掉隐藏代码(适用于 v1.x 至 v2.11.x 多数版本)
用文本编辑器打开项目中实际加载的
pdf.worker.js
if (data.fieldType === 'Sig') {
this.setFlags(_util.AnnotationFlag.HIDDEN);
}
把这几行整个注释掉(前后加 //),保存后刷新页面就行。
方法二:添加白名单判断(更稳妥,推荐用于生产环境)
在同一位置,把原逻辑改成:
if (data.fieldType === 'Sig') {
// 保留签名字段数据,不设隐藏标志
return new WidgetAnnotation(parameters);
}
这样做能绕过默认拦截,同时避免因字段结构异常导致解析中断。
补充IIS服务器配置(仅限Windows部署场景)
如果PDF来自内网系统,并且是通过IIS发布的,还需要检查MIME类型是否齐全:
① 打开IIS管理器,选中服务器节点,双击“MIME类型”,点右侧“添加”
② 扩展名填 .bcmap,MIME类型填 application/octet-stream
③ 再加一条:.properties → text/plain
这两项缺了的话,部分发片字体和本地化资源可能加载失败,间接影响签章区域的正常渲染。
验证修复效果
重启火狐浏览器,拖入同一张含电子签章的发片PDF,观察印章是否完整呈现、位置是否准确、有没有翻转或错位。如果还是不对劲,在地址栏访问 about:pdfjs/,看看控制台报错,重点排查 Sig 字段的解析日志。