Holen Sie sich den Originalinhalt eines mit itextsharp signierten PDFs

Ich versuche, das Originaldokument einer signierten PDF-Datei abzurufen, um den Hash mit einem gespeicherten Dokument zu vergleichen.

Dies ist sehr einfach, wenn das Dokument mehrere Signaturen hat. Mit Acrobat Reader können Sie die vorherige Überarbeitung des Dokuments speichern und fertig.

Überraschenderweise funktioniert dies nicht mit der ersten Signatur, bei der es keinen direkten Weg gibt, um die Originaldaten zu erhalten.

Da es mit dem Reader nicht möglich ist, habe ich es programmatisch mit iTextSharp versucht. Obwohl ich tief gegoogelt habe, habe ich nicht gefunden, wie es geht. Der einzige relevante Beitrag, den ich gefunden habe, ist dieserein es wird aber keine lösung angeboten.

Hat sich jemand diesem Problem gestellt und eine Lösung gefunden?

Danke im Voraus.

EDIT: Ich gebe hier den Code ein, der die Daten basierend auf der Antwort von mkl extrahiert. Lesen Sie die Kommentare der Antwort, um sich vor dem Problem mit der nicht festgelegten Länge der nicht signierten PDF-Dateien zu hüten.

String sOriginalText = File.ReadAllText("FileSigned.pdf", Encoding.Default);
int sTrailerNumberPosition = sOriginalText.LastIndexOf("]/Prev ") + "]/Prev ".Length;
int sTrailerNumberEndPosition = sOriginalText.IndexOf(">", sTrailerNumberPosition);
String sTrailerIndex = sOriginalText.Substring(sTrailerNumberPosition, sTrailerNumberEndPosition -sTrailerNumberPosition);
int iTrailerIndexPosition = sOriginalText.IndexOf(sTrailerIndex + "\r\n%%EOF");
int iEndPosition = sOriginalText.IndexOf("%%EOF", iTrailerIndexPosition) + "%%EOF".Length;
String sOutText = sOriginalText.Substring(0, iEndPosition);
File.WriteAllText("c:/OriginalFile.pdf", sOutText, Encoding.Default);

Antworten auf die Frage(1)

Ihre Antwort auf die Frage