使用经过认证的签名进行签名时,PDF / A已损坏

时间:2015-10-13 16:35:01

标签: itext pdfa

使用经过认证的签名签署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)相同的版本。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我能够重现你最初的三个错误:

  • 字典不得包含密钥&#39; DigestLocation&#39;。
  • 字典不得包含密钥&#39; DigestMethod&#39;。
  • 字典不得包含密钥&#39; DigestValue&#39;。

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

我无法重现您报告的开头和结尾文字错误。如果您可以向我们展示您的代码并输入PDF,那么我们就来看看它。