繁体   English   中英

签名后用itext锁定pdf

[英]lock pdf with itext after sign

我需要在应用签名后锁定 pdf,我需要输出文件看起来像这样:

锁定

如您所见,上面写着“由签名锁定”,

当我得到 pdf 签名外观时,我尝试像这样添加锁:

PdfSignatureAppearance pdfAppearance = stamper.getSignatureAppearance();
pdfAppearance.setCertificationLevel(PdfSignatureAppearance.CERTIFIED_NO_CHANGES_ALLOWED);

但我得到的回报是:

只有一条消息说“不允许更改”,

我应该在过程中添加什么以将 PDF 标记为无法接收更多签名或更改?

您使用的是什么 iText 版本? 这些方面的东西应该起作用:

//get the field item of your sig field
AcroFields acroFields = reader.getAcroFields();
Item item = acroFields.getFieldItem(sigFieldName);
PdfDictionary data = item.getValue(0);

//create lock dict
PdfDictionary lockDict = new PdfDictionary();
lockDict.put(PdfName.TYPE, PdfName.SIGFIELDLOCK);
//action parameter is mandatory
lockDict.put(PdfName.ACTION, PdfName.ALL);
//OR lockDict.put(PdfName.ACTION, PdfName.INCLUDE);
//OR lockDict.put(PdfName.ACTION, PdfName.EXCLUDE);
lockDict.put(PdfName.P, new PdfNumber(1 || 2 || 3);
    
//add as indirect object
PRIndirectReference ref = reader.addPdfObject(lockDict);
data.put(PdfName.LOCK, ref);

根据 iText 版本,某些键可能不存在(还)。 在这种情况下,为您自己定义它们:

PdfName ACTION = new PdfName("Action");
PdfName ALL = new PdfName("All");
PdfName EXCLUDE = new PdfName("Exclude");
PdfName INCLUDE = new PdfName("Include");
PdfName SIGFIELDLOCK = new PdfName("SigFieldLock");

当前 iText 5 版本的签名锁定

@Lontak 的回答演示了如何使用低级类添加签名锁字典。 这对于早期的 iText 版本(5.3.2 之前)和它们的分支特别感兴趣。 较新的 iText 版本提供专用的更高级别建模签名锁定字典并在签名时支持它们。

Signature Lock字典由当前 iText 5 版本中的PdfSigLockDictionary类建模。

如果您想创建锁定签名而不是证书签名(请看下面),您可以通过替换您的

pdfAppearance.setCertificationLevel(PdfSignatureAppearance.CERTIFIED_NO_CHANGES_ALLOWED);

经过

PdfSigLockDictionary pdfSigLockDictionary = new PdfSigLockDictionary(LockPermissions.NO_CHANGES_ALLOWED);
pdfAppearance.setFieldLockDict(pdfSigLockDictionary);

CreateLockingSignature测试signWithLockNoChangesAllowed

您应该通过锁定来代替认证吗?

您的问题听起来像是有人要求您使用锁定而不是认证来将 MDP 级别设置为不允许更改。

但是,客观地讲,这仅在所讨论的签名不是 PDF 的第一个签名时才有意义,因为认证签名(如果存在的话)必须是文档的第一个签名。

只要您的签名是文档的第一个(并且由于不允许更改唯一)签名,您就应该通过认证设置 MDP 级别,因为认证已经在 ISO 32000-1 中定义,而文档锁定具有在 ISO 32000-2 中添加(在 ISO 32000-2 发布之前,文档锁定仅可作为 ISO 32000-1 的 Adob​​e 扩展)。 对 ISO 32000-2 的支持有些有限,许多 PDF 相关产品仍然基于 ISO 32000-1(甚至更早的 PDF 参考)。 因此,与认证相比,PDF 处理器更可能忽略您的文档锁定。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM