Die Kodierung der PDF-text string
Arbeite ich auf parser für PDF-Datei (text-Extraktion).
Wenn Seite Flate-Decodiert (von zlib-Kompression), mein code ist in der Lage, zu Dekomprimieren, "streams", und dann habe ich die Ausgabe (stream-Objekt), so etwas wie unten:
BT
56.8 721.3 Td
/F2 12 Tf
[<01>2<0203>2<04>-10<0503>2<04>-2<0506070809>2<0A>1<0B>]TJ
ET
Ich bin interessiert in das string-array (operand TJ).
Wie es scheint, gibt es mehrere hex-codierte strings enthalten, in das array, sondern die entsprechenden hex-Werte nicht sinnvoll. Stattdessen erscheint eine Sequenz wie 010203... irgendwie lz77-Komprimierung.
- Tun PDF-Dateien haben mehrere Ebenen der Kompression?
- Wie kann ich get plain text aus dem oben genannten string-array?
InformationsquelleAutor Abhishek K | 2015-04-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Abhishek,
Dies ist weit von einer einfachen Frage und leider zeigt es Sie noch nicht gelesen haben, die PDF-Spezifikation. Sollten Sie dies tun.
Können Sie herunterladen des Acrobat SDK hier:
http://www.adobe.com/devnet/acrobat/sdk/eula.html
Teil der PDF-Spezifikation, die eine sehr saftige Dokument erklären, die ins und outs der PDF-Datei (inklusive der Antwort auf Ihre Frage).
Kurz - und nicht als Ersatz für eine Lektüre der Dokumentation - was Sie suchen sind Charakter-Werte in der Codierung der Schrift gesetzt, die von der /F2 12 Tf-Befehl setzt eine bestimmte schriftart verwendet, die beim schreiben von text anschließend.
InformationsquelleAutor David van Driessche
Bevor Sie beginnen, ein ehrgeiziges Projekt wie dieses, machen Sie sich vertraut mit den komplette die offizielle PDF-1.7-Spezifikation. Seien Sie gewarnt: dies ist ein 756 Seiten-Dokument, und es bezieht sich zu über 90 andere Dokumente, die es erklärt auch "normative" für PDF.
Erfahren Sie, dass zur Umkehr der PDF source-code, um text-Inhalt, Sie müssen umkehren,-wenden die Codierung verwendet, die von der schriftart. Es gibt 5 Spezifikation definierten standard-Kodierungen, die verwendet werden können:
StandardEncoding
MacRomanEncoding
WinAnsiEncoding
PDFDocEncoding
MacExpertEncoding
Oben auf, dass, es kann auch ein
CustomEncoding
(die kommt dann ins Spiel, wenn die eingebettete schriftart ist eine Teilmenge, und enthalten nicht alle Glyphen definiert, um die schriftart, sondern nur die Glyphen erforderlich, durch das Dokument). Sie können nur stornieren CustomEncode-d-text, wenn es einen/ToUnicode
Tabelle definiert, die innerhalb der PDF-Datei. Nur dann werden Sie in der Lage, reverse-anzeigen der codierten Zeichen zu Zeichen in Dateinamen.Werden Sie auch lernen, dass es nicht nur eine, aber es gibt vier Operatoren kann verwendet werden, um text-strings:
Tj
: "Text anzeigen"TJ
: "Text anzeigen, so dass einzelne Glyphe Positionierung"'
: "Weiter zur nächsten Zeile und text anzeigen""
: "Satz-Wort-und Zeichenabstand, weiter zur nächsten Zeile, und zeigen Sie den text"Darüber hinaus gibt es drei verschiedene Möglichkeiten zur Darstellung von text-strings. Hier als Beispiele für die string "string":
(string)
: Dieses verwendet standard - druckbare ASCII-Zeichen (nur möglich für Latein/ASCII-text-Teile) in Klammern.(\163\164\162\151\156\147)
: Diese verwendet oktal Charakter-codes (auch in Klammern), wie aufgeführt in "Anhang D (normativ) - Zeichensätze und-Kodierungen" der Spezifikation Dokument.<737472696E67>
: Diese verwendet hex-codiert Zeichen innerhalb der Spitzen Klammern.Die Probleme für die text-Extraktor sind die folgenden:
Mit druckbaren ASCII - Zeichen (
1.
oben) und oktal-Zeichen-codes (2.
oben) gemischt werden. Alle der folgenden sind auch die "rechtlichen" Zusicherungen der string "string" (Auflistung nicht vollständig!):Mit hex-codierten Zeichen-codes (
3.
oben) ist auch nicht geradlinig, da alle folgenden Darstellungen sind gleichwertig:Weitere Skurrilität erlaubt durch die PDF-Spezifikation (oder toleriert von der Adobe-Viewer) siehe auch zum Beispiel:
Ich selbst habe vor kurzem eine kleine Serie von hand-codierten PDF-Dateien, die zeigen, wie ein fehlen, eine falsche, eine manipulierte oder eine richtige
/ToUnicode
Tabelle beeinflussen das Ergebnis der PDF-zu-Text-Umkehrung:(Das gleiche repository enthält einige mehr Studienmaterial in form von hand-codierten PDF-Dateien, markieren Sie die anderen Teile und Betreiber der PDF-syntax.)
Schließlich, Blick auf die kleinen Schnipsel PDF source-code der OP zur Verfügung:
BT
undET
zeigen den Beginn und das Ende des Textes zeigt Abschnitt56.8 721.3 Td
Positionen des aktuellen Punktes zu den Koordinaten "56.8 Punkte in der horizontalen, 721.3 Punkte in vertikaler Richtung".12 Tf
setzt die Schriftgröße auf 12 Punkte./F1
legt die schriftart zu verwenden, um eine, die definiert ist an anderer Stelle in das PDF-Dokument. Diese schriftart auch irgendwo setzt font-encoding (und evtl. einen/ToUnicode
Tabelle). Die font-Kodierung wird festgelegt, welche Glyphe Form gezogen werden sollte, wenn eine bestimmte Zeichen-code ist zu sehen in der text-strings.[<01>2<0203>2<04>-10<0503>2<04>-2<0506070809>2<0A>1<0B>]TJ
Dieser Letzte Teil kann seziert werden, sich in diese Teile:
<01>2
:<01>
ist das erste Zeichen code.2
ist ein parameter für die "einzelne Glyphe Positionierung" erlaubt, wenn der text angezeigt, BetreiberTJ
.<0203>2
:<0203>
sind zwei weitere Charakter-codes.2
wieder ist ein parameter für die "einzelne Glyphe Positionierung" fürTJ
.<04>-10
:<04>
ist der vierte Charakter-code.-10
wieder für die "einzelne Glyphe Positionierung" mitTJ
.<0503>2
:<05>
ist das fünfte Zeichen-code<03>
ist das Dritte Zeichen-code (verwendet vor).2
ist für "einzelne Glyphe Positionierung"...Einzelne Glyphe Positionierung: Die einzelne Glyphe Positionierung funktioniert wie folgt:
Bedeutung von Zeichen-codes: um Zu wissen, die Bedeutung der ersten, zweiten, Dritten, ..., letzten Zeichencodes, müssen Sie lookup diese in der
/ToUnicode
Tabelle Ihrer PDF-Datei. Wenn es nicht eingebettet haben eine solche Tabelle, dann Pech!Schauen Sie einfach extractability von text: um Zu überprüfen, ob Ihre PDF-Datei eignet sich gut, um text-Extraktion, können Sie das Kommandozeilen-tool
pdffonts
. Hier ist ein Beispiel für die Ausgabe:In den oben genannten Beispiel-Fall, der subsetted font
SSKFGJ+ArialMT
verwendet eine benutzerdefinierte Codierung, aber das PDF hat keine/ToUnicode
für diese Schrift, wie dies durch die Spalteuni
. Daher ist es nicht einfach, zu extrahieren text, der angezeigt wird mit dieser schriftart (Extraktion erfordern würde, die manuelle reverse-engineering -- dann kann man aber auch nur "Lesen" die PDF-Seiten).InformationsquelleAutor Kurt Pfeifle