关于 Apache PDFBox 和 PDF 认证的问题

Posted

技术标签:

【中文标题】关于 Apache PDFBox 和 PDF 认证的问题【英文标题】:Question about Apache PDFBox and PDF Certification 【发布时间】:2020-12-24 04:59:22 【问题描述】:

我们正在使用 Apache PDFBox 进行外部远程签名,源代码主要基于 Apache PDFBox 的官方示例。当我们尝试签署具有多个签名的文档时,我们注意到一些“问题”:它们是可见的签名。输入是具有一些签名持有者的文档。流程是: 未签名文档 -> 签名(graphic_signature1, cert1, unsigned_doc) -> signed_doc_1 -> 签名(graphic_signature2, cert2, signed_doc_1) -> signed_doc_2, .... 结果:

signed_doc_1:Adobe Acrobat 说:签名有效,无需修改 signed_doc_2 和后续的:Adobe Acrobat 说:自认证以来对本文档所做的更改是认证方允许的,不会使签名无效。

我也读过这篇文章: https://help.adobe.com/en_US/livecycle/11.0/Services/WS92d06802c76abadb-3598a7d812dbeb3dcf3-7ff0.2.html

我想问什么:

这真的是个问题吗? (对不起,我只是一个开发者,对PDF认证的政策了解不多) 如果是问题,如何解决?

签名时,已调用以下 saveIncrementalForExternalSigning: 签名选项=新签名选项(); signatureOptions.setVisualSignature(创建VisualSignatureTemplate(文档, signingRequest.getSignatureInfo().getPosition().getPageNumber(), rect, signature));

        signatureOptions.setPage(signingRequest.getSignatureInfo().getPosition().getPageNumber());
        doc.addSignature(signature, null, signatureOptions);
        ExternalSigningSupport externalSigning = doc.saveIncrementalForExternalSigning(fos);
        // invoke external signature service
        byte[] cmsSignature = sign(externalSigning.getContent());
        // set signature bytes received from the service and save the file
        externalSigning.setSignature(cmsSignature);

已编辑:我能够通过注释调用 setMDPPermission(doc, signature, 2) 的代码行来“修复”该问题。 (在 Apache PDFBox 签名示例中)。谢谢!

【问题讨论】:

【参考方案1】:

由 OP 发布:

我能够通过注释要调用的代码行来“修复”问题 setMDPPermission(文档,签名,2)。 (在 Apache PDFBox 签名中 样本)。谢谢!

【讨论】:

以上是关于关于 Apache PDFBox 和 PDF 认证的问题的主要内容,如果未能解决你的问题,请参考以下文章

Apache PDFbox开发指南之PDF文档读取

Apache PDFBox 删除字符之间的空格

java 打印pdf文件

使用pdfbox分页保存pdf为图片

Apache PDFBox 表/行对齐与 Boxable

Apache PDFBox的基本使用