Wie kann ich ein PDF-Dokument nach dem Signieren sperren?

Adobe Acrobat bietet die Möglichkeit, das PDF-Dokument nach dem Signieren zu sperren. Hierdurch werden die Dokumentberechtigungen geändert, sodass Acrobat das erneute Signieren des Dokuments oder das Ändern von Anmerkungen oder Formularen nicht anbietet. Dies scheint eine sinnvolle Maßnahme zu sein, nachdem ein Dokument zur Überprüfung durch mehrere Stellen und schließlich zur Freigabe durch eine verantwortliche Person unterzeichnet wurde.

iTextSharp kann auch Dokumente signieren und einem bereits signierten Dokument weitere Signaturen hinzufügen. Grundsätzlich kann iTextSharp auch die Berechtigungen des Dokuments festlegen, aber irgendwie kann ich nicht die gleichen Berechtigungen wie in Acrobat X Pro festlegen. Ich habe die folgenden Berechtigungen festgelegt:

PdfWriter.ALLOW_COPYPdfWriter.ALLOW_DEGRADED_PRINTINGPdfWriter.ALLOW_PRINTINGPdfWriter.ALLOW_SCREENREADERS

Ich habe nicht die folgenden Berechtigungen festgelegt (die alle anderen sein sollten):

PdfWriter.ALLOW_ASSEMBLYPdfWriter.ALLOW_FILL_INPdfWriter.ALLOW_MODIFY_ANNOTATIONSPdfWriter.ALLOW_MODIFY_CONTENTS

Nach dem Speichern eines solchen Dokuments werden in Acrobat X Pro folgende Berechtigungen angezeigt:

Drucken: Erlaubt (OK)Änderungsdokument: Nicht erlaubt (OK)Montage: Nicht erlaubt (OK)Inhalt kopieren: Zulässig (OK)Screenreader: erlaubt (OK)Seiten entfernen: Zulässig (NICHT OK)Annotieren: Zulässig (NICHT OK)Formulare ausfüllen: Erlaubt (NICHT OK)Zeichen: Erlaubt (NICHT OK)Vorlagen erstellen: Zulässig (unbekannt)

Ich verwende keine Verschlüsselung, da dies nur vor dem Einfügen der ersten Signatur möglich ist. Außerdem möchte ich es nicht wirklich verwenden, da a) es im Grunde genommen ohne ein Viewer-Passwort nutzlos ist und b) Acrobat es auch nicht tut, wenn ein Dokument nach dem Signieren gesperrt wird.

Mein Code basiert auf dem iSafePDF-Projekt (Open Source auf Codeplex), das PdfStamper in irgendeiner Weise für ein vorhandenes Dokument verwendet.

Meine iTextSharp-Version ist 5.2.1. Die neueste Version enthält inkompatible API-Änderungen, die ich noch nicht aufgelöst habe.

Wie kann ich das gleiche Ergebnis erzielen wie mit Acrobat?

(Mir ist bewusst, dass meine Anwendung das Dokument weiterhin signieren kann, da die vorhandenen Berechtigungen nicht berücksichtigt werden. Zumindest andere Acrobat-Benutzer sollten die "beabsichtigten Berechtigungen" jedoch korrekt anzeigen.)

Aktualisieren:

Ich habe das Problem weiter untersucht und es scheint von hier zu kommen: Die Berechtigungen können nur über die PdfStamper.SetEncryption-Methode als vierten Parameter festgelegt werden. Der Aufruf dieser Methode zusammen mit dem Anhängen einer Signatur führt jedoch zu der folgenden DocumentException: "Der Anhängemodus unterstützt das Ändern des Verschlüsselungsstatus nicht." Ich habe keine Methode gesehen, die Berechtigungen festlegt, aber keine Verschlüsselung. Ist das das Problem? Unterstützt iTextSharp einfach nicht, was tatsächlich möglich ist?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage