Java 认证和签名后锁定PDF文件

Java 认证和签名后锁定PDF文件,java,pdf,kotlin,itext,itext7,Java,Pdf,Kotlin,Itext,Itext7,我正试图找到一种方法来锁定一个经过签名和认证的PDF文件进行修改,使用的方式是像Abode Reader DC这样的查看者告诉我该文件不能像这样进行修改 lock = new PdfSigFieldLock().setDocumentPermissions(PdfSigFieldLock.LockPermissions.NO_CHANGES_ALLOWED); table.addCell(createSignatureFieldCell("sig4", lock)); (如果我使用Adobe

我正试图找到一种方法来锁定一个经过签名和认证的PDF文件进行修改,使用的方式是像Abode Reader DC这样的查看者告诉我该文件不能像这样进行修改

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

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

然而,当我证明并签署我的pdf文件时,我最终得出以下结论:

在过程中,此PDF首先使用证书签名进行签名,证书级别设置为form filling
PdfSigner.CERTIFIED\u form\u filling

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

我已尝试放置证书签名,并将证书级别设置为
PdfSigner。签名后,CERTIFIED\u NO\u更改。这会打断除证书签名之外的所有签名

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

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

布鲁诺·洛瓦吉(Bruno Lowagie)的白皮书仍然是与iText签约相关的一切信息的良好来源。所包含的Java示例代码是针对iText 5.5.x(实际上是5.3.x到5.5.x)的,但是您可以在github存储库中找到iText 7的端口

在第2.5.5节中,白皮书讨论了签名后锁定字段和文档,其中包含一个示例,其中多个签名依次锁定表单的越来越多字段,最后一个签名也锁定文档,将其从“认证机构已指定本文件允许填写和签署表格。不允许进行其他更改。“至”认证机构已规定不允许对本文件进行任何更改。”如本问题所述

示例代码适用于iText 5.x,是iText 7的端口

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

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

这可以很容易地解决,不过,原始示例当前准备的最终签名字段如下

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

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

lock = new PdfSigFieldLock().setFieldLock(PdfSigFieldLock.LockAction.ALL).setDocumentPermissions(PdfSigFieldLock.LockPermissions.NO_CHANGES_ALLOWED);
table.addCell(createSignatureFieldCell("sig4", lock));
现在,签名面板如下所示:

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

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

此外,所有签名的签名属性现在要求


您是否研究过Bruno Lowagie的白皮书?第2.5.5节签名后锁定字段和文档是关于签名后锁定的……我以前看过该文档,但无法从您提供的链接下载。是否有镜像可用,或者您可以粘贴相关部分?这是iText提供的免费书籍。如果您在通过他们的网站检索PDF时遇到问题,您应该尝试与他们联系。如果您向他们解释您的下载问题,他们肯定会通过其他渠道向您发送副本。显然,iText API发生了重大变化,7.1.6版本似乎使用了
pdfsigfiedlock
而不是
pdfsiglock
在您发布的示例中使用。我仍在寻找一种方法来实现这一点,但如果我自己找到一种方法,我会回来的。@grog PDF签名为文档的修订版签名,PDF格式定义增量更新,这是一种扩展PDF文件的方法,这样签名的修订版的签名字节就不会被损坏。请阅读一些背景以及指向规范的指针等。