【问题标题】:After add LTV signature got corrupted for some pdf file添加 LTV 签名后,某些 pdf 文件已损坏
【发布时间】:2021-05-22 00:55:30
【问题描述】:

我正在尝试在数字签名文档中添加 LTV。在某些文件上,它工作正常,但在某些文件中,它不工作。 我附上所有文件以供参考。

我的 LTV 添加代码链接如下 https://github.com/akr/pdftimestamp

下面给出成功的输入输出文件链接 输入文件:- https://verdantistech-my.sharepoint.com/:b:/g/personal/rabin_samanta_ultria_com/EYn2S0SqxPBJi1f6qDPGBG0BPUj1uLkqj5aoerJOnIGlYg?e=1fqoZP 输出文件:- https://verdantistech-my.sharepoint.com/:b:/g/personal/rabin_samanta_ultria_com/EeHWotTg511Kg6Hz_JeTjnUB4-8ya7lcWyxhhgtvy1OkHQ?e=CYnX1r

下面给出了失败的输入输出文件链接 输入文件:- https://verdantistech-my.sharepoint.com/:b:/g/personal/rabin_samanta_ultria_com/Ecw0TtX8YzlPjZJT6OGJarYBx1yFBm2h1PvOSKPaKK1fuA?e=EC7Xsr 输出文件:- https://verdantistech-my.sharepoint.com/:b:/g/personal/rabin_samanta_ultria_com/ETf9smc-pkFPggRMXi1I1WsBJ6OZOzOj9lmvXPD25tgWiw?e=j24Ipe

请帮助我了解为什么在某些文件中签名使用相同的代码损坏了。

【问题讨论】:

    标签: java pdfbox


    【解决方案1】:

    原因是源 PDF 已经损坏,因此您的签名和扩展文件的第一个修订版已损坏!

    源 PDF 只有一个修订版,其交叉引用表如下所示:

    xref
    0 118
    0000000000 65535 f
    0000000018 00000 n
    ...
    0000304213 00000 n
    119 64
    0000304499 00000 n
    ...
    0000316209 00000 n
    185 5
    0000316253 00000 n
    ...
    0000316837 00000 n
    192 1
    0000316969 00000 n
    194 8
    0000317581 00000 n
    ...
    0000342232 00000 n
    

    (PDF 的签名和扩展版本具有与其第一个修订版相似的交叉引用表。)

    如您所见,它由多个部分组成并且有间隙(例如,对象 118 没有条目)。

    这是无效的:

    对于从未增量更新的文件,交叉引用部分应仅包含一个子部分,其对象编号从 0 开始。

    (ISO 32000-1 和 ISO 32000-2,在这两种情况下都是第 7.5.4 节“交叉引用表”)

    这通常会被忽视,Adobe Acrobat 在遇到使 PDF 无效的小问题时通常会非常松懈。

    通常,也就是说,除了在签名修订后验证具有集成签名和增量更新的文档时,在这种情况下,Adobe Acrobat 经常认为此类问题是可疑的并且无法通过签名验证,即使它在签名修订后没有增量更新的情况下验证相同的 PDF 时不会抱怨。

    您的示例 PDF 根据其 Info 字典由 Aspose.Pdf for Java 16.10.0 生成。事实上,众所周知,Aspose PDF 组件会创建此类无效的第一个交叉引用表,请参阅 Aspose 免费支持论坛上的this answerPDF/A-1 conversion creates invalid XRef table 线程。

    iText 7 在其早期 7.0.x 版本中也生成了类似损坏的交叉引用表,请参阅 this answer

    【讨论】:

    • 除非在签名修订后验证具有集成签名和增量更新的文档 -> 有没有办法在同一个调用中添加数字签名和 LTV 而无需增量更新文档?否则我该如何解决我的问题?
    • “我该如何解决我的问题?” - 您可以拒绝损坏的 PDF。或者你可以修复它们。当然,只有在没有以前签名的 PDF 中才能进行修复。 (只需在同一个调用中添加数字签名和 LTV 而不进行增量更新只会将问题转移到下一个服务来处理该 PDF,例如稍后再次为其添加时间戳。)
    • 我无法拒绝该 pdf。我上传到 DocuSign 平台的同一个 pdf,但他们能够处理 pdf 而不会被拒绝。
    • 然后他们修复它。 Adobe Acrobat 也可以修复它。尽管如此,您应该小心并准备好拒绝一些损坏的 pdf。否则,签名的文档可能会说用户不想要的内容。
    猜你喜欢
    • 2021-06-09
    • 2021-11-06
    • 2022-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多