gpt4 book ai didi

java - 认证和签名后锁定 PDF 文件

转载 作者:行者123 更新时间:2023-12-02 03:11:49 25 4
gpt4 key购买 nike

我正在尝试找到一种方法来锁定经过签名和认证的 PDF 以使用 iText 进行修改像 Abode Reader DC 这样的查看者告诉我该文档不开放进行这样的修改

(如果我使用 Adob​​e 签署文档,我就可以这样做)使用 PDF 版本 1.7 和 iText 版本 7.1.6。

然而,当我验证并签署我的 pdf 时,我最终得到的是:

在处理过程中,此 PDF 首先使用认证签名进行签名,认证级别设置为表单填写 PdfSigner.CERTIFIED_FORM_FILLING

之后,PDF 将由任意数量的人进行数字签名。

我尝试在签名后放置认证签名并将认证级别设置为 PdfSigner.CERTIFIED_NO_CHANGES。这会破坏除认证签名之外的所有签名。

我还尝试过使用密码“锁定”文件,但这也没有达到预期的效果。

有没有办法在使用 iText 库放置最后一个签名后锁定 pdf 文件,以便在签名和认证后显示第一条消息?

最佳答案

白皮书Digital Signatures for PDF documents Bruno Lowagie 的文章仍然是与 iText 签名相关的所有内容的良好来源。包含的 Java 示例代码适用于 iText 5.5.x(实际上是 5.3.x 到 5.5.x),但您可以在 itext/i7js-signatures 中找到 iText 7 的端口。 github 存储库。

白皮书第 2.5.5 节讨论了签名后锁定字段和文档,其中包含一个示例,其中多个签名连续锁定表单中越来越多的字段,最后一个签名也锁定了文档,将其从“验证者已指定此文档允许填写表格和签名。不允许进行其他更改”。改为“验证者已指定不允许对本文件进行任何更改。”正如这个问题所希望的那样。

示例代码可用here对于 iText 5.x 和 here是 iText 7 的端口。

不幸的是,iText 7 端口的当前代码中有一个小错误,导致步骤 4 的结果(锁定整个文档的签名)导致出现此签名面板:

Signature Panel of output of step 4

(黄色三角形在那里是因为我不信任测试证书,但红色圆圈和错误文本不应该在那里。)

这个问题可以很容易地解决,不过,原始示例目前准备了这样的最终签名字段

lock = new PdfSigFieldLock().setDocumentPermissions(PdfSigFieldLock.LockPermissions.NO_CHANGES_ALLOWED);
table.addCell(createSignatureFieldCell("sig4", lock));

(C2_12_LockFields方法createForm)

不幸的是,它忘记在签名字段锁定字典中设置所需的操作条目。您可以将其添加到代码中,如下所示:

lock = new PdfSigFieldLock().setFieldLock(PdfSigFieldLock.LockAction.ALL).setDocumentPermissions(PdfSigFieldLock.LockPermissions.NO_CHANGES_ALLOWED);
table.addCell(createSignatureFieldCell("sig4", lock));

现在签名面板如下所示:

Signature Panel of output of step 4 with fixed lock dictionary

(如上所述,黄色三角形在那里是因为我不信任测试证书。)

此外,根据需要,所有签名的签名属性现在都声明

"The certifier has specified that no changes are allowed to be made to this document"

关于java - 认证和签名后锁定 PDF 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56989028/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com