Как я могу использовать исправления, чтобы избежать недействительности цифровых подписей в PDF?

Используя Acrobat 9, если я подпишу PDF-файл с помощью самозаверяющего сертификата, а затем отредактирую PDF-файл после его подписания, Acrobat сообщит мне, что в документе есть действительная подпись, но в документе также есть неподписанные изменения. Если я затем снова подпишу PDF-файл и посмотрю на панель подписи, он покажет первую подписанную ревизию с действительной подписью, отметит, что изменения были внесены после подписания первой ревизии, а затем покажет вторую подписанную ревизию с действительной подписью.

Я пытаюсь воспроизвести это поведение с помощью iTextSharp. В коде я создаю PDF-файл и подписываю его. Затем я редактирую PDF-файл и подписываю его снова. Когда я открываю документ в Acrobat, он показывает обе версии, но помечает первую редакцию как недействительную подпись, поскольку документ был изменен. Насколько я могу судить, я думаю, что iTextSharp подписывает весь документ, а не только первую ревизию внутри этого документа. Я установил для параметра Append значение true как в конструкторах PdfStamper, так и в конструкторах PdfSignatureAppearance, но, похоже, это не имеет никакого эффекта.

Поскольку я могу получить желаемый результат с помощью Acrobat, я предполагаю, что просто неправильно использую iTextSharp. Может кто-нибудь пролить некоторый свет на это?


person James    schedule 20.11.2009    source источник


Ответы (2)


Вам необходимо обновить существующий PDF-файл вместо того, чтобы полностью его переписывать. Установите для следующих атрибутов значение true, чтобы разрешить обновление.

PdfReader reader;
...
reader.Appendable = true;
person Dwight Kelly    schedule 16.12.2009

Полагаю, Adobe делает это со слоями. Каждая версия PDF-файла, вероятно, помещается на отдельный слой и затем подписывается. Если iText поддерживает слои, вы можете сделать это аналогичным образом.

person BZ1    schedule 09.05.2011