You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用iTextSharp添加数字签名后PDF中QR码变为灰色问题求助

QR码签名后变灰的原因及解决方法

核心原因

1. 权限移除操作导致图像重编码异常

你代码中调用的reader.RemoveUsageRights()方法会移除PDF自带的使用权限签名,触发PDF对象的全局重编码,矢量生成或带特殊编码的QR码在这个过程中会丢失RGB颜色信息,被默认转换为灰度。

2. 旧版本兼容配置触发灰度预处理

你设置了sap.Acro6Layers = false,会让签名外观回退到Acrobat 5兼容模式,该模式会对页面内所有非文本对象做灰度预处理来适配旧版阅读器,刚好覆盖了你的QR码区域。

3. 旧版本iTextSharp已知bug

如果你使用的是5.5.x之前的iTextSharp版本,存在官方已确认的bug:添加可见签名时会误将页面内小尺寸的RGB图像转换为灰度模式,QR码刚好属于小尺寸图像范畴,因此被误改颜色。

修复步骤

  • 移除reader.RemoveUsageRights()代码行,除非你明确当前PDF存在权限限制必须移除该标记。如果确实需要移除权限,建议先将移除权限后的PDF输出到内存流,再重新实例化PdfReader读取后再执行签名操作,避免重编码逻辑冲突。
  • 将sap.Acro6Layers = false修改为sap.Acro6Layers = true,目前主流PDF阅读器均已支持Acrobat 6及以上的层规范,无需兼容更早的旧版本。
  • 可删除sap.Layer4Text = PdfSignatureAppearance.questionMark代码行,该配置是添加签名验证状态的问号标记层,无特殊需求的情况下移除可避免层叠加导致的颜色显示异常。
  • 升级iTextSharp到5.5.13.2最终版本,该版本已修复颜色空间误转换的相关bug。

内容的提问来源于stack exchange,提问作者Dr. Amresh Nikam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 09:09:08