Bestes Tool zum Überprüfen von PDF-Dateien? [geschlossen]

89

Welches Tool empfehlen Sie zum Überprüfen von PDF-Dateien?

Anwendungsfall: Ich versuche, PDF-Dateien programmgesteuert zu generieren (mit iText). Ich habe Probleme beim Erreichen bestimmter Layouts, aber ich habe PDF-Dateien mit Text, der so angelegt ist, wie ich es möchte (generiert aus Word). Ich würde gerne rückentwickeln, wie sie es machen.

PDF Inspector scheint gut zu sein, aber ich suche etwas für Windows.

bmm6o
quelle
PDF Inspector basiert auf Java, also auf mehreren Plattformen.
david.perez
2
Scheint aber nicht unter Windows zu laufen. Das Glas macht nichts, wenn es angeklickt wird. Wenn ich an der Kommandozeile angerufen werde, bekomme ichno main manifest attribute, in PDF Document Inspector.jar
Tom
@ david.perez Es basiert auf Java, ist aber mit Apfel umwickelt, so dass es nur eine Apple-Distribution ist. Es gibt das Glas "PDF Document Inspector.app/Contents/Resources/Java/PDF Document Inspector.jar", aber es kann nicht als java -jar "PDF Document Inspector.jar" gestartet werden. Außerdem gibt es viele com.apple.cocoa. * Enthält das sind plattformspezifisch. :(
andrej
Ich benutze jetzt erfolgreich iText Rups, Multiplattform und Java-basiert.
David.Perez

Antworten:

18

Adobe Acrobat verfügt über einen sehr coolen, aber gut versteckten Modus, mit dem Sie PDF-Dateien überprüfen können. Ich habe einen Blog-Artikel geschrieben, der dies unter https://blog.idrsolutions.com/2009/04/viewing-pdf-objects/ erklärt.

markiere stephens
quelle
Dies scheint ein Plugin zu erfordern; Zumindest ist es in Acrobat Reader 9.5.5 unter Linux nicht verfügbar.
Adam Spires
3
@ AdamSpiers, Preflight Dialogfeld ist eine Funktion von Adobe Acrobat, nicht Adobe Reader
IPSUS
... und Acrobat ( ehemals Acrobat Exchange ) ist nicht für Linux verfügbar: - /
Adam Spiers
7
Für das Preflight-Dialogfeld ist Adobe Acrobat Pro erforderlich. Es ist in Adobe Acrobat Standard nicht verfügbar.
Futal
Und es ist ein Alptraum für die Benutzeroberfläche.
Jon
81

Neben den in den anderen Antworten erwähnten GUI-basierten Tools gibt es einige Befehlszeilen-Tools, mit denen der ursprüngliche PDF-Quellcode in eine andere Darstellung umgewandelt werden kann, mit der Sie die (jetzt geänderte Datei) mit einem Texteditor überprüfen können. Alle folgenden Tools funktionieren unter Linux, Mac OS X, anderen Unix-Systemen oder Windows.

qpdf (mein Favorit)

Verwenden Sie qpdf, um die Streams (der meisten) ObjStmObjekte zu dekomprimieren und Objekte in einzelne indirekte Objekte zu zerlegen :

qpdf --qdf --object-streams=disable orig.pdf uncompressed-qpdf.pdf

qpdfbeschreibt sich selbst als ein Tool, das "strukturelle, inhaltserhaltende Transformationen für PDF-Dateien" durchführt .

Öffnen und überprüfen Sie dann einfach die uncompressed-qpdf.pdfDatei in Ihrem bevorzugten Texteditor. Die meisten der zuvor komprimierten (und damit binären) Bytes sind jetzt Klartext.

mutool

Es gibt auch das mutoolBefehlszeilentool, das im Lieferumfang des MuPDF PDF-Viewers enthalten ist (ein Schwesterprodukt von Ghostscript, das von derselben Firma, Artifex, hergestellt wird ). Der folgende Befehl dekomprimiert auch Streams und erleichtert die Überprüfung über einen Texteditor:

mutool clean -d orig.pdf uncompressed-mutool.pdf

podofouncompress

PoDoFo ist eine FreeSoftware / OpenSource-Bibliothek für die Arbeit mit dem PDF-Format und enthält einige Befehlszeilentools, darunterpodofouncompress. Verwenden Sie es so, um PDF-Streams zu dekomprimieren:

podofouncompress orig.pdf uncompressed-podofo.pdf

peepdf.py

PeePDF ist ein Python-basiertes Tool, mit dem Sie PDF-Dateien durchsuchen können. Sein ursprünglicher Zweck war die Erforschung und Analyse von PDF-basierter Malware, aber ich finde es nützlich, auch die Struktur vollständig harmloser PDF-Dateien zu untersuchen.

Es kann interaktiv verwendet werden, um die in einer PDF-Datei enthaltenen Objekte und Streams zu "durchsuchen".

Ich werde hier kein Anwendungsbeispiel geben, sondern nur einen Link zu seiner Dokumentation:

pdfid.py und pdf-parser.py

pdfid.pyund pdf-parser.pysind zwei PDF-Tools von Didier Stevens, die in Python geschrieben wurden.

Ihr Hintergrund besteht auch darin, schädliche PDF-Dateien zu untersuchen. Ich finde es jedoch auch nützlich, die Struktur und den Inhalt harmloser PDF-Dateien zu analysieren.

Hier ist ein Beispiel, wie ich den unkomprimierten Stream des PDF-Objekts Nr. 1 extrahieren würde. 5 in eine * .dump-Datei:

pdf-parser.py -o 5 -f -d obj5.dump my.pdf

Schlussbemerkungen

  1. Bitte beachten Sie, dass einige Binärteile in einer PDF-Datei nicht unbedingt unkomprimierbar (oder in lesbaren ASCII-Code dekodierbar) sind, da sie in PDFs in ihrem nativen Format eingebettet und verwendet werden. Solche PDF-Teile sind JPEG-Bilder, Schriftarten oder ICC-Farbprofile.

  2. Wenn Sie die obigen Tools mit den angegebenen Befehlszeilenbeispielen vergleichen, werden Sie feststellen, dass sie NICHT alle identische Ausgaben erzeugen. Der Aufwand, sie auf ihre Unterschiede zu vergleichen, kann Ihnen helfen, die Art der PDF-Syntax und des Dateiformats besser zu verstehen.

Kurt Pfeifle
quelle
42

Ich verwende iText RUPS (Lesen und Aktualisieren der PDF-Syntax) unter Linux. Da es in Java geschrieben ist, funktioniert es auch unter Windows. Sie können alle Objekte in einer PDF-Datei in einer Baumstruktur durchsuchen. Es kann auch Flate-codierte Streams im laufenden Betrieb decodieren, um die Inspektion zu vereinfachen.

Hier ist ein Screenshot:

iText RUPS Screenshot

gkcn
quelle
9
java -jar itext-rups-5.5.6.jar-> Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: com/itextpdf/text/Version- Wie soll man das Ding laufen lassen? Edit: Hab es herausgefunden. Sie sollten die von SourceForge angebotene Standarddatei nicht herunterladen. Sie müssen die JAR-Datei herunterladen, die Abhängigkeiten enthält.
Zero3
2
@ Zero3 ist gerade auf das Gleiche gestoßen. Vielen Dank für Ihren Kommentar.
Sam
1
@ KurtPfeifle Ich stimme vollkommen zu. Leider ist eine Menge Software (wie diese!) Nur über SourceForge verfügbar, da der Betreuer das Projekt noch nicht an einen anderen Ort verschoben hat und dies möglicherweise nie tun wird. Sie sollten in der Tat sehr vorsichtig sein, wenn Sie
heutzutage
6
Ja - als kompiliertes JAR und sogar als Exe für Windows-Benutzer. Siehe github.com/itext/rups/releases/latest
Amedee Van Gasse
1
@AmedeeVanGasse Der Screenshot in dieser Antwort zeigt eine Ansicht der Seite (zwischen dem Dokumentbaum und der Registerkarte xref). Wie kann ich diese Ansicht in Version 5.5.9 unter Windows anzeigen?
iPDFdev
5

Ich habe PDFBox mit gutem Erfolg verwendet. Hier ist ein Beispiel dafür, wie der Code aussieht (zurück aus Version 0.7.2), der wahrscheinlich aus einem der bereitgestellten Beispiele stammt:

// load the document
System.out.println("Reading document: " + filename);
PDDocument doc = null;                                                                                                                                                                                                          
doc = PDDocument.load(filename);

// look at all the document information
PDDocumentInformation info = doc.getDocumentInformation();
COSDictionary dict = info.getDictionary();
List l = dict.keyList();
for (Object o : l) {
    //System.out.println(o.toString() + " " + dict.getString(o));
    System.out.println(o.toString());
}

// look at the document catalog
PDDocumentCatalog cat = doc.getDocumentCatalog();
System.out.println("Catalog:" + cat);

List<PDPage> lp = cat.getAllPages();
System.out.println("# Pages: " + lp.size());
PDPage page = lp.get(4);
System.out.println("Page: " + page);
System.out.println("\tCropBox: " + page.getCropBox());
System.out.println("\tMediaBox: " + page.getMediaBox());
System.out.println("\tResources: " + page.getResources());
System.out.println("\tRotation: " + page.getRotation());
System.out.println("\tArtBox: " + page.getArtBox());
System.out.println("\tBleedBox: " + page.getBleedBox());
System.out.println("\tContents: " + page.getContents());
System.out.println("\tTrimBox: " + page.getTrimBox());
List<PDAnnotation> la = page.getAnnotations();
System.out.println("\t# Annotations: " + la.size());
Kaleb Pederson
quelle
3

Die Objektanzeige in Acrobat ist gut, aber der PDF Canopener von Windjack Solution ermöglicht eine bessere Überprüfung mit einer Pipette zur Auswahl von Objekten auf der Seite. Ermöglicht auch Änderungen an PDF.

http://www.windjack.com/products/pdfcanopener.html

Dwight Kelly
quelle
3

Es gibt auch eine andere Option. Adobe Acrobat Pro kann auch die interne Baumstruktur der PDF-Datei anzeigen.

  1. Öffnen Sie Preflight
  2. Gehen Sie zu Optionen (rechte obere Ecke)
  3. Interne PDF-Struktur

Darüber hinaus kann Adobe Acrobat Pro auch die interne Struktur der Dokumentschriftarten im PDF anzeigen. Die meisten anderen "PDF Tree Structure Viewer" haben diese Option nicht

Geben Sie hier die Bildbeschreibung ein

Vadimo
quelle
2
Dies beschreibt @ mark-stephens in der akzeptierten Antwort.
Koppor
3
Die Antwort von @ mark-stephens verweist nur auf einen Blog-Beitrag, der in Zukunft möglicherweise verschwinden wird (und von SO abgeraten wird). vadimo's liefert tatsächlich die Antwort.
Seestern
1

Wenn Sie programmgesteuert in Python arbeiten möchten, ist pdfminer eine gute Option. Sie können mit der PDF-Struktur im Speicher als Objekthierarchie arbeiten oder sie als XML serialisieren.

WP McNeill
quelle
-6

Mein Vorschlag ist Foxit PDF Reader, der sehr hilfreich ist, um wichtige Textbearbeitungsarbeiten an PDF-Dateien durchzuführen .

nifCody
quelle
6
Ich konnte in Foxit Reader keine Möglichkeit finden, die interne Struktur eines PDF-
Dokuments anzuzeigen