Блокировка полей документа с помощью iText7 - PullRequest
0 голосов
/ 07 марта 2020

Я написал код для блокировки полей в документе с помощью 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);

Поля документа заблокированы, но информация о блокировке полей документа не отображается на панели подписи. (ожидаемый результат показан на изображении)

enter image description here

Ответы [ 2 ]

1 голос
/ 11 марта 2020

Вышеописанный сценарий может быть достигнут путем добавления значений в словарь 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);
1 голос
/ 09 марта 2020

Пожалуйста, попробуйте удалить поля из словаря 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);

В моих тестах я получил желаемый результат Document locked by SH_SIGNATURE_417868 с этим изменением.

Некоторые фоны:

Эта запись Поля указана как Требуется, если значение Действие равно Включить или исключить (ISO 32000-1, таблица 233 - Записи в словаре блокировки подписи). В случае действия Все , как в вашем случае, следовательно, не требуется или необязательно. Кроме того, в этом случае это также не имеет смысла, поскольку все поля должны быть заблокированы в любом случае. Таким образом, Adobe Reader считает некорректным словарь блокировки полей подписи с записью Fields для действия All . (Что ж, вероятно, он принял бы эту запись, если бы содержались все имена полей документа, я не проверил все возможное содержимое ...)

Класс iText 7 PdfSigFieldLock, к сожалению, в настоящее время автоматически создает такой Поля , поэтому вы должны удалить его ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...