PDF/A 使用认证签名签名时损坏

PDF/A broken when signing using a certified signature

使用认证签名签署 PDF/A-2a 时,PDF/A 已损坏。 出现的错误是:

如果我使用未经认证的签名签署相同的 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) 保持相同的版本。

有什么想法吗?

我能够重现您遇到的最初三个错误:

  • 字典不能包含关键字 'DigestLocation'。
  • 字典不能包含关键字 'DigestMethod'。
  • 字典不能包含关键字 'DigestValue'。

我已将此修复程序应用到 iText。这确实是 iText 中的一个错误。问题是如果您使用附加模式,PdfStamper 会忽略提供的版本。这使得它默认为 1.4 版。正如您已经发现的那样,它弄乱了 PdfSignatureAppearance 中的 PDF/A2-a 文档。

我无法重现您报告的开始和结束文本错误。如果您能给我们看一下您的代码并输入PDF,我们会看一看。