Indexdatenleser "Pdf"
Dieser Indexdatenleser erlaubt die Extraktion von nativen Textinhalten aus PDF-Dateien. Eine Extraktion von Texten aus eingebundenen Bilddaten, für die eine OCR-Verarbeitung erforderlich ist, wird nicht unterstützt.
Bei der Extraktion der Textinhalte ist der Aufbau des PDF-Formats zu berücksichtigen. PDF-Dateien besitzen keine zusammenhängenden Textbereiche. Jede Zeichenfolge, in der Regel die einzelnen Wörter, wird stattdessen als separates Textfragment betrachtet. Um Fragmente auszulesen, muss jedes Textfragment über die X-/Y-Koordinaten auf der Seite adressiert werden. Die konkreten Koordinaten der Fragmente können manuell vermessen werden, z. B. anhand eines maßstabsgetreuen Papierausdrucks. Alternativ können die Koordinaten über einen Assistenten im Konfigurator ausgelesen werden.
Eigenschaft | Beschreibung |
|---|---|
ProcessReadIndex[].Tolerance | Toleranzbereich in Millimetern Der Toleranzbereich legt fest, wie weit die Koordinaten eines Textfragments von einem gegebenen Wert abweichen dürfen, um dennoch mit diesem Wert als übereinstimmend betrachtet zu werden. Standardwert: |
ProcessReadIndex[].LineFeed(#) | Zeilenumbruchzeichen, die innerhalb von extrahierten Textbereichen genutzt werden, die mehrere Zeilen umfassen Standardwert: |
ProcessReadIndex[].ItemPerLine | Wahrheitswert, ob ein extrahierter Textbereich, der einem Tabellenfeld zugeordnet ist, in einen separaten Wert pro Zeile unterteilt wird, um daraus eine entsprechende Anzahl von Tabellenzeilen zu generieren Ansonsten können multiple Werte für tabellarische Zielfelder nur gelesen werden, indem eine der unten beschriebenen Syntaxvarianten für den Die Eigenschaft Standardwert: |
Zur Definition des .InputName, also des auszulesenden Textfragmentes oder Bereiches von Fragmenten, ist eine spezielle Syntax zu verwenden, die nachfolgend erläutert wird.
Absolute Position
Im einfachsten Fall wird ein einzelnes Fragment über die absolute Position adressiert, d.h. über die X- und Y-Koordinaten. Die Maßeinheit ist dabei Millimeter.
(X,Y)
Die X-/Y-Koordinaten sind relativ zum Seitenursprung. Der Seitenursprung liegt, abweichend von einem normalen Koordinatensystem, oben links auf der Seite, weil dies der Leserichtung entspricht. Die linke obere Ecke der Seite hat die Koordinaten (0,0).
Die Koordinaten eines Textfragments beziehen sich immer auf die Startposition des Fragments, d.h. dessen linke untere Ecke. Bei den Koordinaten (20,100) wird beispielsweise nach einem Fragment gesucht, dessen Beginn 20 mm vom linken Seitenrand und dessen Unterkante 100 mm vom oberen Seitenrand entfernt liegt. Diese Angaben beziehen sich auf ein Fragment, das gerade ausgerichtet ist. Für ein gedrehtes Fragment sind die gewünschten Koordinaten anhand der entsprechend gedrehten Seite zu vermessen, sodass das Fragment selbst wieder gerade ausgerichtet ist. Dabei werden nur Drehungen im 90-Grad-Winkel unterstützt. Drehungen der ganzen Seite anstatt der enthaltenen Fragmente müssen nicht berücksichtigt werden, da diese vom Programm implizit ausgeglichen werden.
Bei der Suche nach einem Fragment an der angegebenen Position wird die Eigenschaft .Tolerance berücksichtigt. Um einen größeren Suchbereich zu definieren oder bewusst mehrere Fragmente aus einem größeren Bereich zu extrahieren, kann die Breite und die Höhe dieses Bereiches zusätzlich mit angegeben werden:
(X,Y,{Breite},{Höhe})
Die Höhe wird als Absolutwert angegeben, der entgegen des verschobenen Y-Ursprungs in normaler Richtung ausgewertet wird. Die Y-Position gibt die Unterkante des Bereiches an, sodass bei einem Wert von 100 und einer Höhe von 40 nicht ein Bereich mit der Oberkante 140 definiert wird, sondern mit 60. Die Koordinaten (20,100,80,40) beschreiben somit z. B. einen Bereich, dessen Oberkante bei 60, Unterkante bei 100, linker Rand bei 20 und rechter Rand bei 100 liegt.
Alle Fragmente, deren Startposition in diesem Bereich liegt, werden als zu einem Bereich zugehörig betrachtet. Diese Zuordnung erfolgt unabhängig davon, ob die vollständigen Fragmente über den Bereich hinausgehen. Bei der Angabe eines Bereichs wird, anders als bei einer Einzelposition, die Eigenschaft .Tolerance nicht berücksichtigt, weil der Bereich bereits so definiert werden kann, dass gewisse Schwankungen in der Positionierung von Fragmenten berücksichtigt werden.
Wenn ein Bereich mehrere Fragmente umfasst, ist das Extraktionsergebnis für diesen Bereich eine zusammengesetzte Zeichenfolge dieser Fragmente. Die Fragmente werden gemäß ihrer Position von links nach rechts und oben nach unten sortiert. In der Regel ist dadurch der normale Textfluss wiederhergestellt, sofern bei Fragmenten, die zu einer Textzeile gehören, keine Schwankungen in deren Y-Position vorhanden sind, die über den konfigurierten Toleranzwert hinausgehen.
Relative Position
Fragmente können, anstatt über die absolute Position, über eine relative Position adressiert werden. Die Position ist relativ zu einem Schlüsselwort, das gesucht wird. Hierfür muss die Syntax wie folgt erweitert werden:
"Schlüsselwort",[First|Last|All],(X,Y,{Breite},{Höhe})
Mit "Rechnungsnummer",First,(30,0,20,0) wird beispielsweise nach dem ersten Vorkommen des Wortes "Rechnungsnummer" auf einer Seite gesucht. Der Extraktionsbereich beginnt in X-Richtung 30 mm entfernt von der Startposition des gefundenen Wortes und hat eine Breite von 20 mm. Für die Y-Richtung ist in diesem Beispiel kein Versatz angegeben, sodass sich der zu extrahierende Begriff in derselben Textzeile befinden muss.
Optional kann die Fundstelle angegeben werden. Diese Angabe legt fest, welche Fundstellen des Schlüsselwortes auf einer Seite verwendet werden:
First: Die erste Fundstelle des Schlüsselwortes wird verwendet. (Standardwert)Last: Die letzte Fundstelle des Schlüsselwortes wird verwendet.All: Alle Fundstellen des Schlüsselwortes werden verwendet. Dies kann zu mehreren Extraktionswerten führen.
Wenn der Schlüsselbegriff aus mehreren Einzelwörtern besteht, können die Wörter mit einem Leerzeichen getrennt angegeben werden, z. B. Rechnung Nummer. Implizit wird dann nach 2 aufeinanderfolgenden Fragmenten gesucht, die jeweils den Wert "Rechnung" und "Nummer" haben. Bezugspunkt für den relativen Versatz ist dabei das erste der beiden Fragmente.
Statt fester Schlüsselwörter sind auch Wildcard-Ausdrücke (mit Platzhaltern *, ? und #) und reguläre Ausdrücke (in /-Zeichen eingebettet) für die Suche nutzbar, z. B. Rech*. Im Fall einer kombinierten Suche über mehrere Fragmente bleibt dabei die Syntax mit dem Leerzeichen zwischen den Schlüsselwörtern bestehen. Das obige Beispiel wird somit zu Rech* Num*.
Festlegung der Seiten
Um Seiten festzulegen, auf denen die Extraktion durchgeführt wird, muss die Syntax wie folgt erweitert werden:
(X,Y,{Breite},{Höhe}),{Seitenbereich}
Diese Syntaxerweiterung kann mit der zuvor beschriebenen Syntaxerweiterung für die Adressierung einer relativen Position kombiniert werden.
Der Seitenbereich kann entweder über die Begriffe First (Standardwert), Last und All beschrieben werden oder durch die Angabe konkreter Seitennummern, z. B. 1;2;3 oder 1-3.
Die Suche über mehrere Seiten kann zu mehreren Extraktionswerten führen. Wenn das Zielfeld ein Kopfdatenfeld ist, wird diesem Feld gemäß der Konfigurationseigenschaft ReadMultiValues dann ein Array von Werten zugewiesen. Wenn das Zielfeld ein Tabellenfeld ist, werden die Werte in eine entsprechende Anzahl von Tabellenzeilen aufgeteilt.