【问题标题】:PDF/A broken when signing using a certified signature使用认证签名签名时 PDF/A 损坏
【发布时间】:2015-10-13 16:35:01
【问题描述】:

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

有什么想法吗?

【问题讨论】:

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

标签: itext pdfa


【解决方案1】:

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

  • 字典不得包含键“DigestLocation”。
  • 字典不得包含键“DigestMethod”。
  • 字典不得包含键“DigestValue”。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-09
    • 2022-01-01
    • 2017-01-14
    • 2014-02-11
    • 1970-01-01
    • 1970-01-01
    • 2017-10-27
    • 2021-11-06
    相关资源
    最近更新 更多