我编写了一个代码来使用iText7锁定文档中的字段,字段被锁定在最终文档中,但是当在Adobe中打开左签名面板时,就没有关于字段锁定的信息了。
我的代码片段如下:
PdfSigFieldLock pdfSigFieldLock = new PdfSigFieldLock();
pdfSigFieldLock.SetDocumentPermissions(PdfSigFieldLock.LockPermissions.NO_CHANGES_ALLOWED);
string[] fieldToLock = new string[]{ fieldName };
pdfSigFieldLock.SetFieldLock(PdfSigFieldLock.LockAction.ALL, fieldToLock);
pdfSigner.SetFieldLockDict(pdfSigFieldLock);文档字段被锁定,但签名面板中没有显示有关文档字段锁定的信息。(预期结果如图所示)

发布于 2020-03-09 12:13:05
请尝试将字段从Lock字典中删除:
PdfSigFieldLock pdfSigFieldLock = new PdfSigFieldLock();
pdfSigFieldLock.SetDocumentPermissions(PdfSigFieldLock.LockPermissions.NO_CHANGES_ALLOWED);
string[] fieldToLock = new string[]{ fieldName };
pdfSigFieldLock.SetFieldLock(PdfSigFieldLock.LockAction.ALL, fieldToLock);
pdfSigFieldLock.GetPdfObject().Remove(PdfName.Fields); // <<<<
pdfSigner.SetFieldLockDict(pdfSigFieldLock);在我的测试中,我确实得到了所需的输出。

有了这种变化。
一些背景:
如果Action的值包括或排除(ISO 32000-1,表233 -签名字段锁字典中的条目),则按需要指定字段条目。因此,在操作All的情况下,它既不是必需的,也不是可选的。此外,在这种情况下,这也是没有意义的,因为所有字段都将被锁定。因此,Adobe显然认为带有字段条目的签名字段锁字典对于All操作是不正确的。(如果文档的所有字段名都包含了,那么它可能会接受这个条目,我没有检查所有可能的内容.)
不幸的是,iText 7类PdfSigFieldLock目前自动创建了这样一个字段,因此您必须删除它。
发布于 2020-03-11 07:55:12
以上场景可以通过手动向PdfSigFieldLock字典添加值来实现。下面是代码片段:
PdfDictionary lockDictionary = new PdfDictionary();
lockDictionary.Put(PdfName.Action, new PdfName("All"));
lockDictionary.Put(PdfName.P, new PdfNumber(1));
PdfSigFieldLock pdfSigFieldLock = new PdfSigFieldLock(lockDictionary);
pdfSigner.SetFieldLockDict(pdfSigFieldLock);https://stackoverflow.com/questions/60578355
复制相似问题