Hallo, ich versuche, einige Texte aus einigen PDFs zu analysieren, und ich möchte PoDoFo verwenden, jetzt habe ich versucht, nach Beispielen zu suchen, wie man PoDoFo verwendet, um ein pdf zu analysieren, aber alles, was ich mir vorstellen kann, ist Beispiele wie man eine PDF-Datei erstellt und schreibt, was ich nicht wirklich brauche.
Wenn jemand eine Anleitung oder ein Beispiel zum Parsen einer PDF-Datei mit PoDoFo hat oder Vorschläge für eine andere Bibliothek hat, die ich verwenden kann, lassen Sie es mich wissen. Auch ich weiß, dass es pdftotext auf Linux gibt, jedoch kann ich nicht nur das nicht verwenden, aber ich würde viel lieber in der Lage sein, alles zu tun, was ich intern brauche und nicht darauf angewiesen, dass externe Programme installiert werden.
PoDoFo bietet keine Möglichkeit, Text aus einem Dokument einfach zu extrahieren, aber es ist nicht schwer zu tun.
Laden Sie ein Dokument in ein PdfMemDocument
:
Iterate über jede Seite:
%Vor%Iterate über alle PDF-Befehle auf dieser Seite:
%Vor%Der "Prozesstoken" & amp; "process var" Kommentare werden dort etwas komplexer. Sie erhalten rohe PDF-Befehle zur Verarbeitung. Zum Glück, wenn Sie nicht wirklich die Seite rendern und alles, was Sie wollen, ist der Text, können Sie die meisten von ihnen ignorieren. Die Befehle, die Sie verarbeiten müssen, sind:
% Co_de%,% Co_de%,% Co_de%,% Co_de%,% Co_de%,% Co_de%,% Co_de%,% Co_de%,% Co_de%,% Co_de%,% Co_de% und% Co_de%
Die Befehle BT
und ET
markieren den Anfang und das Ende eines Textstreams. Sie wollen also alles ignorieren, was nicht zwischen einem Td
/ TD
-Paar liegt.
Die PDF-Sprache basiert auf RPN. Ein Befehlsstrom besteht aus Werten, die auf einen Stapel geschoben werden und Befehle, die Werte vom Stapel entfernen und verarbeiten.
Die Befehle Ts
, T
, Tm
und Tf
sind die einzigen, die tatsächlich Text generieren. "
, '
und Tj
geben eine einzelne Zeichenfolge zurück. Verwenden Sie TJ
und BT
, um es zu verarbeiten.
ET
gibt ein Array von Strings zurück. Sie können jeden mit:
Die anderen Befehle werden verwendet, um zu bestimmen, wann ein Zeilenumbruch eingeführt werden soll. BT
und ET
führen ebenfalls Zeilenumbrüche ein. Am besten laden Sie die PDF-Spezifikation von Adobe herunter und sehen sich den Textverarbeitungsabschnitt an. Es erklärt, was jeder Befehl ausführlicher macht.
Ich fand es sehr hilfreich, ein kleines Programm zu schreiben, das eine PDF-Datei entnimmt und den Befehlsstrom für jede Seite ausgibt.
Hinweis: Wenn Sie nur reinen Text ohne Positionsinformationen extrahieren, müssen Sie eigentlich keinen Stapel von "
-Werten verwalten. Alle Text-Rendering-Befehle haben höchstens einen Parameter. Sie können einfach davon ausgehen, dass der letzte Wert in '
den Parameter für den aktuellen Befehl enthält.
Ich habe PoDoFo nicht verwendet, aber ein kurzer Blick durch die Klassenhierarchie auf ihrer API-Webseite zeigt:
%Vor%( API-Dokumentlink )
Also würde ich hier nur eine Vermutung riskieren, dass Sie tun:
%Vor% Dann stelle ich mir vor, Sie navigieren durch den Dokumentbaum, indem Sie doc.GetObjects()
aufrufen und durch dieses Array gehen ( siehe PdfDocument-Klasse )