一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

火狐浏览器的PDF.js内置阅读器为什么无法正确显示发票电子签章

时间:2026-06-07 10:59:53 编辑:袖梨 来源:一聚教程网

火狐PDF.js默认隐藏【Sig】签名字段导致电子签章不显示,需确认pdfjs.enabled为true且pdfjs.disabled为false,修改pdf.worker.js中if(data.fieldType==='Sig')设HIDDEN的逻辑,IIS还需添加.bcmap和.properties MIME类型。

火狐浏览器的PDF.js内置阅读器无法正确显示发票电子签章,是因为其默认将类型为 【Sig】 的签名注释字段主动隐藏,导致台头、公章、数字签名等关键视觉元素被过滤掉,发票预览时出现空白印章区域或完全缺失签章。

确认PDF.js是否已启用并正常加载

在地址栏输入 about:config → 点击“接受风险并继续” → 搜索 pdfjs.enabled → 确保值为 true;再搜索 pdfjs.disabled → 确保值为 false。若任一参数为 false 或未定义,PDF.js可能根本未启动,后续所有修复均无效。

定位并修改pdf.worker.js中的签名隐藏逻辑

电子签章不显示的根本原因藏在 pdf.worker.js 文件中。该文件在解析到签名字段(fieldType === 'Sig')时,会强制设置 HIDDEN 标志位,使渲染层跳过绘制。

方法一:直接注释掉隐藏代码(适用于 v1.x 至 v2.11.x 多数版本)
用文本编辑器打开项目中实际加载的 pdf.worker.js → 全局搜索 if (data.fieldType === 'Sig') → 找到形如以下三行的代码块:
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
③ 再添加一条:.propertiestext/plain
【缺少这两项会导致部分发票字体与本地化资源加载失败,间接影响签章区域渲染】

验证修复效果

重启火狐浏览器 → 拖入同一张含电子签章的发票PDF → 观察印章是否完整呈现、位置是否准确、有无翻转或错位;若仍异常,尝试在地址栏访问 about:pdfjs/ 查看控制台报错,重点排查 Sig 字段解析日志。

热门栏目