Struktur einer PDF-Datei? [geschlossen]

71

Für ein kleines Projekt muss ich PDF-Dateien analysieren und einen bestimmten Teil davon übernehmen (eine einfache Zeichenkette). Ich würde gerne Python verwenden, um dies zu tun, und ich habe mehrere Bibliotheken gefunden, die in gewisser Weise in der Lage sind, das zu tun, was ich will.

Aber jetzt, nach ein paar Recherchen, frage ich mich, wie eine PDF-Datei wirklich aufgebaut ist. Weiß jemand, ob es irgendwo online eine Spezifikation oder einige Erklärungen gibt? Ich habe einen Link auf Adobe gefunden, aber es scheint, dass es sich um einen toten Link handelt :(

Valentin Jacquemin
quelle

Antworten:

44

Hier ist ein Link zum Referenzmaterial von Adobe

http://www.adobe.com/devnet/pdf/pdf_reference.html

Sie sollten jedoch wissen, dass es bei PDF nur um Präsentation geht, nicht um Struktur. Das Parsen wird nicht einfach.

Minze
quelle
Ok ... Großartig, der Link ist jetzt in Ordnung ... Als ich meine Nachforschungen anstellte, konnte ich die letzte Referenz nicht herunterladen.
Valentin Jacquemin
62
Starren Sie nicht zu lange darauf; du wirst verrückt werden.
6
Ich bin neu in der PDF-Analyse und habe einige Links gefunden, die ich teilen möchte, Link1 , Link2 und Link3 .
RBK
35

Ich fand die GNU-Einführung in PDF hilfreich, um die Struktur zu verstehen. Es enthält eine leicht lesbare Beispiel-PDF-Datei , die ausführlich beschrieben wird.

Weitere hilfreiche Links:

Jeff Moser
quelle
GNU-Links sind abgestanden
am
5
@dwarring Ich habe sie mit Webarchiv-Links für die Nachwelt repariert.
Vard
Adobe hostet das Intro-Preso nicht mehr dort, wo es früher war. Auf der Suche habe ich es hier gefunden: mafiadoc.com/slides_59c4bd4c1723dd6ff3e29059.html
LAFK sagt Reinstate Monica
24

Als ich anfing, mit PDF zu arbeiten, war die Navigation in der PDF-Referenz sehr schwierig. Es kann hilfreich sein zu wissen, dass die Übersicht über die Dateistruktur in der Syntax enthalten ist und dass Adobe die Dokumentstruktur als Objektstruktur und nicht als Dateistruktur bezeichnet. Das findet man auch in der Syntax. Die Beschreibung der Operatoren ist in Anhang A versteckt - sehr nützlich, um zu verstehen, was in Inhaltsströmen geschieht. Wenn Sie jemals Schmerzen haben, mit Farbräumen zu arbeiten, werden Sie diese in Grafiken finden! Hoffentlich helfen Ihnen diese Hinweise dabei, Dinge schneller zu finden als ich.

Wenn Sie Windows verwenden, können Sie mit pdftron CosEdit die Objektstruktur durchsuchen, um sie zu verstehen. Es ist eine kostenlose Demo verfügbar, mit der Sie die Datei untersuchen, aber nicht speichern können.

danio
quelle
1
+1. Sieht so aus, als wäre CosEdit ein großartiger Einführungsbrowser, nicht perfekt, aber viel besser, als zu versuchen, die rohe Binärdatei zu durchsuchen. : /
Jason S
Ich habe CosEdit heruntergeladen, aber mein PDF wurde abgelehnt. Das gleiche PDF wird von anderen Programmen akzeptiert. CosEdit mag richtig sein, aber es hat mir nicht geholfen festzustellen, was mit meinem PDF nicht stimmte.
LarsH
10

Hier ist die Rohreferenz von PDF 1.7 und hier ein Artikel , der die Struktur einer PDF- Datei beschreibt. Wenn Sie Vim verwenden, ist das pdftk-Plugin eine gute Möglichkeit, das Dokument in einer etwas weniger rohen Form zu untersuchen, und das pdftk- Dienstprogramm selbst (und seine GPL-Quelle) ist eine großartige Möglichkeit, Dokumente auseinanderzuhalten.

jmah
quelle
1
Die rohe Referenz scheint sinnlos. Es enthält nur eine einzige Seite?
Carcamano
@Carcamano Die Rohreferenz ist ein (großes) Paket mit einer Reihe von Anhängen. Der erste Anhang beschreibt das PDF-Format und umfasst 1310 Seiten.
Banbh
7

Ich versuche so ziemlich das Gleiche zu tun. Die PDF-Referenz ist sehr schwer zu lesen. Dieses Tutorial ist meiner Meinung nach ein besserer Anfang.


quelle
Wahrscheinlich der neuere Link: planetpdf.com/…
aderchox
6

Dies kann helfen, ein wenig Licht ins Dunkel zu bringen: (ab Seite 11 von PDF32000.book)

Die PDF-Syntax lässt sich am besten anhand von vier Teilen verstehen, wie in Abbildung 1 dargestellt:

• Objekte. Ein PDF-Dokument ist eine Datenstruktur, die aus einer kleinen Menge grundlegender Arten von Datenobjekten besteht. Unterabschnitt 7.2, "Lexikalische Konventionen", beschreibt den Zeichensatz, der zum Schreiben von Objekten und anderen syntaktischen Elementen verwendet wird. Unterabschnitt 7.3, "Objekte", beschreibt die Syntax und die wesentlichen Eigenschaften der Objekte. Unterabschnitt 7.3.8, "Stream-Objekte", enthält vollständige Details zum komplexesten Datentyp, dem Stream-Objekt.

• Dateistruktur. Die PDF-Dateistruktur bestimmt, wie Objekte in einer PDF-Datei gespeichert werden, wie auf sie zugegriffen wird und wie sie aktualisiert werden. Diese Struktur ist unabhängig von der Semantik der Objekte. Unterabschnitt 7.5, "Dateistruktur", beschreibt die Dateistruktur. Unterabschnitt 7.6, "Verschlüsselung", beschreibt einen Mechanismus auf Dateiebene zum Schutz des Inhalts eines Dokuments vor unbefugtem Zugriff.

• Dokumentstruktur. Die PDF-Dokumentstruktur gibt an, wie die grundlegenden Objekttypen zur Darstellung von Komponenten eines PDF-Dokuments verwendet werden: Seiten, Schriftarten, Anmerkungen usw. Unterabschnitt 7.7, "Dokumentstruktur", beschreibt die gesamte Dokumentstruktur. Spätere Klauseln befassen sich mit der detaillierten Semantik der Komponenten.

• Inhaltsströme. Ein PDF-Inhaltsstrom enthält eine Folge von Anweisungen, die das Erscheinungsbild einer Seite oder einer anderen grafischen Einheit beschreiben. Diese Anweisungen werden zwar auch als Objekte dargestellt, unterscheiden sich jedoch konzeptionell von den Objekten, die die Dokumentstruktur darstellen, und werden separat beschrieben. In Abschnitt 7.8, "Inhaltsströme und Ressourcen", werden PDF-Inhaltsströme und die zugehörigen Ressourcen erläutert.

Das Navigieren in einer PDF-Datei erfordert anscheinend etwas mehr als nur einen kurzen Aufwand.

Josh Albert
quelle
4

Wenn Sie PDF mit Python analysieren möchten, schauen Sie sich bitte PDFMINER an . Dies ist die beste Bibliothek, um PDF-Dateien bis zum heutigen Datum zu analysieren.

Codingscientist
quelle
1
PDFMiner ist großartig. Besonders versuchen pdf2txt -t html -d -Y exact -o foo.html foo.pdf. Es ist ein ziemlich gutes Werkzeug, um einen Blick auf die Struktur einer PDF-Seite zu werfen. Ich arbeite auch an einigen Verbesserungen für unser eigenes Projekt.
LarsH
2

Das Extrahieren von Text aus PDF ist ein schwieriges Problem, da PDF eine solche layoutorientierte Struktur aufweist. Sie können die Dokumente und den Quellcode meines kaum erfolgreichen CPAN-Versuchs sehen (meine Implementierung ist in Perl). Die PDF-Datenstruktur ist sehr cool und gut gestaltet, aber es ist einfacher zu schreiben als zu lesen.

Chris Dolan
quelle
2

Eine Möglichkeit, Hinweise zu erhalten, besteht darin, eine PDF-Datei zu erstellen, die aus einer leeren Seite besteht. Ich habe CutePDF Writer auf meinem Computer und habe ein leeres Wordpad-Dokument von einer Seite erstellt. Wird in eine PDF-Datei gedruckt und anschließend mit dem Editor geöffnet.

Verwenden Sie als Nächstes eine Kopie dieser Datei, entfernen Sie möglicherweise interessante Zeilen oder Textblöcke und laden Sie sie anschließend in Acrobat Reader neu. Sie werden überrascht sein, wie wenig Informationen benötigt werden, um ein funktionierendes einseitiges PDF-Dokument zu erstellen.

Ich versuche, eine Tabelle zu erstellen, um ein PDF-Formular aus Code zu erstellen.

Daniel Kim
quelle
0

Sie benötigen das PDF-Referenzhandbuch, um Informationen zu Details und Struktur von PDF-Dateien zu erhalten. Ich schlage vor, mit Version 1.7 zu beginnen.

Unter Windows habe ich ein kostenloses Tool PDF Analyzer verwendet , um die interne Struktur von PDF-Dateien anzuzeigen. Dies hilft Ihnen beim Verständnis des Referenzhandbuchs.

Geben Sie hier die Bildbeschreibung ein

(Ich bin mit PDF Analyzer verbunden, keine Absicht zu fördern)

juFo
quelle
PDF ist seit 10 Jahren ein ISO-Standard. Sollte man daher nicht vorschlagen, mit dem ISO-Dokument statt mit der Adobe PDF-Referenz zu beginnen, insbesondere weil Adobe eine kostenlose Kopie von ISO 32000-1 (mit ausgetauschten Seitenkopfzeilen) veröffentlicht hat?
mkl
Zu Beginn vermittelt Ihnen das PDF-Referenzhandbuch ein gutes Verständnis der Grundlagen. Sobald Sie sie beherrschen, können Sie die ISO lesen. Auf diese Weise erhalten Sie einen Einblick, warum einige Änderungen vorgenommen wurden. Die grundlegende Analyse bleibt beim Lesen des Referenzhandbuchs unverändert. Als Hinweis ist es gut, auch mehrere Versionen von Handbüchern zu lesen, da diese manchmal subtile Änderungen enthalten.
JuFo
In der Tat kann es sinnvoll sein, verschiedene Versionen der Dokumentation zu einem bestimmten Thema zu lesen, aber in meinen Augen sollte man mit der aktuellen Version beginnen und nicht mit archaischen.
mkl
0

Um Text aus einer PDF-Datei zu extrahieren, versuchen Sie dies unter Linux, BSD usw. oder verwenden Sie Cygwin unter Windows:

pdfinfo -layout some_pdf_file.pdf

Eine Nur-Text-Datei mit dem Namen some_pdf_file.txtwird erstellt. Je einfacher das Layout der PDF-Datei ist, desto einfacher ist die Ausgabe der TXT-Datei.

Hexadezimalzeichen sind häufig in der TXT-Dateiausgabe vorhanden und sehen in Texteditoren seltsam aus. Diese hexadezimalen Zeichen stehen normalerweise für geschweifte einfache und doppelte Anführungszeichen, Aufzählungszeichen, Bindestriche usw. im PDF.

Führen Sie diesen grep-Befehl aus, um den Kontext anzuzeigen, in dem die hexadezimalen Zeichen angezeigt werden, und halten Sie die Original-PDF-Datei bereit, um festzustellen, welche Zeichen die Codes in der PDF-Datei darstellen:

grep -a --color=always "\\\\[0-9][0-9][0-9]" some_pdf_file.txt

Dadurch wird eine eindeutige Liste der verschiedenen Oktalcodes im Dokument bereitgestellt:

grep -ao "\\\\[0-9][0-9][0-9]" some_pdf_file.txt|sort|uniq

Um diese hexadezimalen Zeichen in ASCII-Entsprechungen umzuwandeln, kann eine Kombination aus grep, sed und bc verwendet werden. Ich werde die Prozedur veröffentlichen, um dies bald zu tun.

keithchristian
quelle