Jak mogę zablokować dokument PDF po jego podpisaniu?

Adobe Acrobat ma możliwość zablokowania dokumentu PDF po jego podpisaniu. Powoduje to zmianę uprawnień dokumentu, dzięki czemu program Acrobat nie oferuje ponownego podpisywania dokumentu ani modyfikowania adnotacji lub formularzy. Wydaje się, że jest to rozsądna czynność do wykonania po podpisaniu dokumentu do przeglądu przez wiele podmiotów i wreszcie do wydania przez osobę odpowiedzialną.

iTextSharp może również podpisywać dokumenty, a także dodawać kolejne podpisy do już podpisanego dokumentu. iTextSharp w zasadzie może również ustawić uprawnienia dokumentu, ale jakoś nie mogę go ustawić tak, aby ustawiał te same uprawnienia, co Acrobat X Pro. Ustawiłem następujące uprawnienia:

PdfWriter.ALLOW_COPYPdfWriter.ALLOW_DEGRADED_PRINTINGPdfWriter.ALLOW_PRINTINGPdfWriter.ALLOW_SCREENREADERS

Nie ustawiam następujących uprawnień (co powinno być wszystkim innym):

PdfWriter.ALLOW_ASSEMBLYPdfWriter.ALLOW_FILL_INPdfWriter.ALLOW_MODIFY_ANNOTATIONSPdfWriter.ALLOW_MODIFY_CONTENTS

W każdym razie po zapisaniu takiego dokumentu widzę następujące uprawnienia w programie Acrobat X Pro:

Drukowanie: Dozwolone (OK)Modyfikowanie dokumentu: Niedozwolone (OK)Montaż: niedozwolone (OK)Kopiuj zawartość: Dozwolone (OK)Czytnik ekranu: Dozwolone (OK)Usuń strony: Dozwolone (NIE OK)Adnotacja: Dozwolone (NIE OK)Wypełnij formularze: Dozwolone (NIE OK)Znak: Dozwolone (NIE OK)Utwórz szablony: Dozwolone (nieznane)

Nie używam szyfrowania, ponieważ jest to możliwe tylko przed umieszczeniem pierwszego podpisu. Poza tym nie chcę go używać, ponieważ a) jest w zasadzie bezużyteczny bez hasła przeglądarki ib) Acrobat nie robi tego ani podczas blokowania dokumentu po podpisaniu.

Mój kod jest oparty na projekcie iSafePDF (open-source na Codeplex), który używa PdfStamper w jakiś sposób na istniejącym dokumencie.

Moja wersja iTextSharp to 5.2.1. Najnowsza wersja ma niekompatybilne zmiany API, których jeszcze nie rozwiązałem.

Jak więc mogę osiągnąć ten sam rezultat, co w przypadku programu Acrobat?

(Wiem, że moja aplikacja nadal będzie mogła podpisać dokument, ponieważ nie zależy mu na istniejących uprawnieniach. Ale przynajmniej inni użytkownicy programu Acrobat powinni poprawnie widzieć „zamierzone uprawnienia”).

Aktualizacja:

Zbadałem problem i wydaje się, że pochodzi stąd: uprawnienia można ustawić tylko za pomocą metody PdfStamper.SetEncryption, jako jej 4 parametru. Ale wywołanie tej metody wraz z dołączeniem podpisu prowadzi do następującego wyjątku DocumentException: „Tryb dołączania nie obsługuje zmiany stanu szyfrowania”. Nie widziałem metody, która ustawia uprawnienia, ale nie szyfruje. Czy to jest problem? Czy iTextSharp po prostu nie obsługuje tego, co jest możliwe?

questionAnswers(1)

yourAnswerToTheQuestion