Itext 使用经认证的签名签名时PDF/A已损坏

Itext 使用经认证的签名签名时PDF/A已损坏,itext,pdfa,Itext,Pdfa,使用认证签名签署PDF/a-2a时,PDF/a被破坏。 出现的错误有: 字典不能包含键“DigestLocation” 字典不能包含键“DigestMethod” 字典不能包含键“DigestValue” 如果我使用未经认证的签名对同一PDF/A-2a进行签名,则不会出现Digestxxx错误。所以我想这个问题与认证签名有关 我使用的是iText版本5.4.5,在阅读发行说明时,我发现版本5.5.4似乎解决了这个问题。 然后我改成了5.5.4版,但运气不好。同样的错误也会出现。 事实上,使用

使用认证签名签署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)
if(writer.getPdfVersion().getVersion()
母版是在附加模式下使用PdfStamper.createSignature创建的,版本参数等于“\0”,以保持与原始文档(1.7)相同的版本


有什么想法吗?

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

  • 字典不能包含键“DigestLocation”
  • 字典不能包含键“DigestMethod”
  • 字典不能包含键“DigestValue”
我已经对iText应用了一个修复程序。这确实是iText中的一个bug。问题是,如果您使用的是追加模式,PdfStamper会忽略提供的版本。这使得它默认为1.4版。正如您已经发现的那样,它将PDFSignaturePearance中的PDF/A2-a文档弄乱了


我无法重现您报告的开始和结束文本错误。如果您可以向我们展示您的代码并输入PDF,那么我们将看一看。

我已更新到5.5.7版,结果与使用5.5.4版相同。同样,如果我使用未经认证的签名对同一PDF/A-2a进行签名,则不会出现Digestxxx错误。请共享有问题的PDF和您的关键代码。