使用认证签名签署 PDF/A-2a 时,PDF/A 已损坏。出现的错误是:
- 字典不得包含键“DigestLocation”。
- 字典不得包含键“DigestMethod”。
- 字典不得包含键“DigestValue”。
如果我使用未经认证的签名签署相同的 PDF/A-2a,则不会出现 Digestxxx 错误。所以我认为问题与认证签名有关。
我使用的是 iText 5.4.5 版,阅读发行说明后,我发现 5.5.4 版似乎已经解决了这个问题。然后我更改为 5.5.4 版,但没有运气。出现相同的错误。事实上,使用 5.5.4 版我在签署 PDF/A 时还有两个错误:
- 缺少结束文本运算符。
- 缺少开始文本运算符。
你知道我怎么知道丢失的文本运算符应该在 PDF 中的什么位置?
提前感谢您的帮助。
更新:我一直在调试 itext,问题似乎出在版本检测中。PDF 是 1.7 版,但是当输入此条件(在 PdfSignatureAppearance.java 中)以确定是否必须写入 Digestxxx 字段时,返回的版本是 4。
if (writer.getPdfVersion().getVersion() < PdfWriter.VERSION_1_6)
压模是在附加模式下使用 PdfStamper.createSignature 创建的,版本参数等于“\0”,以保持与原始文档 (1.7) 相同的版本。
有任何想法吗 ?