首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用iText7的文档字段锁定

使用iText7的文档字段锁定
EN

Stack Overflow用户
提问于 2020-03-07 14:05:46
回答 2查看 353关注 0票数 0

我编写了一个代码来使用iText7锁定文档中的字段,字段被锁定在最终文档中,但是当在Adobe中打开左签名面板时,就没有关于字段锁定的信息了。

我的代码片段如下:

代码语言:javascript
复制
        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);

文档字段被锁定,但签名面板中没有显示有关文档字段锁定的信息。(预期结果如图所示)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-09 12:13:05

请尝试将字段Lock字典中删除:

代码语言:javascript
复制
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目前自动创建了这样一个字段,因此您必须删除它。

票数 1
EN

Stack Overflow用户

发布于 2020-03-11 07:55:12

以上场景可以通过手动向PdfSigFieldLock字典添加值来实现。下面是代码片段:

代码语言:javascript
复制
        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);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60578355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档