c# - 使用 iText7 锁定文档字段
问题描述
我已经编写了一个代码来使用 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);
文档字段已锁定,但签名面板中未显示有关文档字段锁定的信息。(预期结果如图所示)
解决方案
请尝试从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的值为 Include 或 Exclude ,则该Fields条目被指定为必需(ISO 32000-1,表 233 - 签名字段锁定字典中的条目)。因此,在您的情况下的所有操作的情况下,它既不是必需的,也不是可选的。此外,在这种情况下也没有任何意义,因为无论如何都应该锁定所有字段。因此,Adobe Reader 显然考虑了一个签名字段锁定字典,其中包含一个字段条目动作不正确。(好吧,如果包含文档的所有字段名称,它可能会接受该条目,我没有检查所有可能的内容......)
PdfSigFieldLock
不幸的是,iText 7 类目前会自动创建这样一个Fields,因此您必须将其删除。
推荐阅读
- wordpress - WordPress 媒体不显示图像
- ios - 无法重现 iOS App Review Team 的崩溃
- python - 如何将二进制 rsa 签名转换为 pem 格式
- architecture - 如何抽象数据库访问层?
- python - 使用 Numpy [Python] 进行元素智能乘法
- python - 如何使用 tf tensorflow 2.0 循环使用 yolov3 检测不同的图像?
- javascript - Typescript 服务器端使用 Javascript 没有错误
- python - 使用 Miniconda 安装新的 Jupyter Lab - 内核无法关闭
- python - python SSLError上的discord bot问题:[SSL:DECRYPTION_FAILED_OR_BAD_RECORD_MAC]
- python - 如何更改 seaborn FacetGrid 中的边距标题颜色