Frage

Ich versuche, meinen Weg durch Poppler und ihre (mangelnde) Dokumentation zu erhalten.

Was ich tun möchte, ist eine sehr einfache Sache: eine PDF-Datei öffnen und den Text in ihm lesen. Ich bin dann den Text gehen zu verarbeiten, aber das ist nicht wirklich wichtig hier.

Also ... ich sah die poppler_page_get_text Funktion, und es ist eine Art von Arbeiten, aber ich muß ein Auswahlrechteck angeben, was nicht sehr praktisch ist. Ist da nicht nur eine sehr einfache Funktion, würde die Ausgabe des PDF-Text, um (vielleicht Zeile für Zeile?).

War es hilfreich?

Lösung

Sie sollten das Auswahlrechteck auf die pageSize/MediaBox der Seite und erhalten Sie alle damit den Text in der Lage sein.

ich sagen sollte, weil, bevor Sie beginnen fragen, warum Sie durch die Ausgabe von poppler_page_get_text überrascht zu bekommen, sollten Sie sich bewusst sein, wie der Text auf einer Seite wird angelegt. Alle Grafiken sind auf einer Seite angelegt, ein Programm in Postfix-Notation ausgedrückt werden. Um die Seite zu machen, wird dieses Programm auf einer leeren Seite ausgeführt wird.

Operationen im Programm enthalten, wechselnde Farben, Position, die aktuelle Transformationsmatrix, Zeichnen von Linien, Bezier-Kurven und so weiter. Der Text wird durch eine Reihe von Text Betreibern angelegt, die immer eingeklammert werden von BT (beginnen Text) und ET (Ende Text). Wie oder wo Text auf einer Seite platziert wird, ist im alleinigen Ermessen die Software, die das PDF erzeugt. Zum Beispiel für Druckertreiber, ruft der Code reagiert auf GDI für DrawString und übersetzt diese in Textzeichenoperationen.

Wenn Sie Glück haben, wird der Text auf der Seite in einer vernünftigen Ordnung mit sane der Verwendung von Schriften angelegt, aber viele Programme, die PDF generieren sind nicht so freundlich. Psroff, zum Beispiel mochte zunächst alle Klartext platzieren, dann den kursiven Text, dann den fett gedruckten Text. Worte können oder nicht in der Lesereihenfolge platziert werden. Fonts kann neucodierte sein, so dass 'a' zu '{' Karten oder was auch immer. Dann könnten Sie Ligatur, wo mehrere Zeichen durch einzelne Glyphen ersetzt werden. - Die häufigsten sind ae, oe, fi, fl und ffl

Mit all diesen an Ort und Stelle, wird der Prozess Text zu extrahieren ist entschieden nicht-trivial, sie werden also nicht überrascht, wenn Sie schlechte Qualität ergibt sich aus Textextraktion zu sehen.

Früher habe ich die Arbeit an den Textextraktion Werkzeugen in Acrobat 1.0 und 2.0 - es ist eine echte Herausforderung, Recht zu bekommen

.

Andere Tipps

Nur für die Datensätze, ich bin mit poppler im Augenblick mit diesem kleinen Programm

#include <iostream>

#include "poppler-document.h"
#include "poppler-page.h"
using namespace std;

int main()
{
    poppler::document *doc = poppler::document::load_from_file("./CMI2APIDocV1.4.pdf");
    const int pagesNbr = doc->pages();
    cout << "page count: " << pagesNbr << endl;

    for (int i = 0; i < pagesNbr; ++i)
        cout << doc->create_page(i)->text().to_latin1().c_str() << endl;
}

// g++ -I/usr/include/poppler/cpp/ -c poppler.cpp
// g++ -I/usr/include/poppler/cpp poppler.o  /usr/lib/x86_64-linux-gnu/libpoppler-cpp.a /usr/lib/x86_64-linux-gnu/libpoppler.a /usr/lib/x86_64-linux-gnu/liblcms2.so     /usr/lib/x86_64-linux-gnu/libfontconfig.a /usr/lib/x86_64-linux-gnu/libjpeg.a /usr/lib/x86_64-linux-gnu/libfreetype.a     /usr/lib/x86_64-linux-gnu/libexpat.a /usr/lib/x86_64-linux-gnu/libz.a

Ich bin sehr zufrieden mit th Ergebnis bisher, mit Ausnahme von Arrays und „Tabelle“ Restitution in reinem Text, wo irgendwann eine einzelne Zelle über mehrere Zeilen erstrecken kann. (Wenn jemand weiß, wie das zu vermeiden?)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top