- Verwenden Sie das Objekt OutprocLoader, um ein Dokument zu verarbeiten und ein Layout für jede Seite abzurufen. Schreiben Sie das erhaltene Layout mit der Methode SaveToStream in einen Datenstrom.
- Verwenden Sie das Objekt InprocLoader, um mit der Methode CreateLayoutFromStream eine Kopie des ursprünglichen Layouts wiederherzustellen. Verwenden Sie diese Kopie für die weitere Iteration des Layout-Inhalts.
- Verwenden Sie das als Out-of-Process-Server geladene Objekt Engine, um ein Dokument zu verarbeiten und ein Layout für jede Seite abzurufen. Schreiben Sie das erhaltene Layout mit der Methode SaveToArray als Byte-Array.
- Verwenden Sie das nativ geladene Objekt Engine (d. h. im aktuellen Prozess aus der Bibliothek libFREngine.so geladen), um das erhaltene Byte-Array mit Ihrer Implementierung der Schnittstelle IReadStream zu lesen.
- Verwenden Sie das nativ geladene Objekt Engine, um mit der Methode CreateLayoutFromStream eine Kopie des ursprünglichen Layouts wiederherzustellen. Verwenden Sie diese Kopie für die weitere Iteration des Layout-Inhalts.
Layout-Blöcke
Textblock
Textblock
Dieser Blocktyp entspricht einem Bildbereich, der als formatierter Text erkannt wird. Auf die Eigenschaften dieses Blocks kann über das Objekt TextBlock zugegriffen werden. Dieses Objekt bietet außerdem Zugriff auf den erkannten Text aus dem vom Block umschlossenen Bildbereich.
Tabellenblock
Tabellenblock
Dieser Blocktyp entspricht einer Tabelle. Blöcke dieses Typs dürfen nur rechteckig sein (die Region enthält nur ein Rechteck). Auf die Eigenschaften dieses Blocktyps kann über das Objekt TableBlock zugegriffen werden. Die Struktur der Tabelle wird durch zwei Sammlungen von Tabellentrennlinien beschrieben, horizontal und vertikal (die Objekte TableSeparators), sowie durch eine Sammlung von Tabellenzellen (das Objekt TableCells). Jede Tabellenzelle wird als Block eines bestimmten Typs behandelt. Der erkannte Text ist eine Eigenschaft einer einzelnen Zelle, nicht der gesamten Tabelle. Wenn eine Zelle ein Bild ist, wird das innerhalb der Zellgrenzen eingeschlossene Bild nicht erkannt und im erkannten Text als Bild angezeigt. Tabellentrennlinien können unterschiedliche Typen haben. Ein Trennlinientyp wird für ein Segment einer Trennlinie definiert, das zwischen den nächstgelegenen Schnittpunkten mit anderen Trennlinien liegt. Trennlinien können die folgenden Typen haben:
- Absent. Dieser Typ wird Tabellentrennlinien zugewiesen, die durch verbundene Zellen „verlaufen sollten“.
- Unknown. Dieser Typ wird standardmäßig jeder neu hinzugefügten Tabellentrennlinie zugewiesen.
- Invisible. Dieser Typ wird einer „imaginären“ Tabellentrennlinie zugewiesen, die als Ergebnis der Analyse der Tabellenstruktur an einer Stelle erstellt wurde, an der die Quelltabelle keine hatte, an der sie aber logischerweise vorhanden sein sollte.
- Explicit. Tabellentrennlinien dieses Typs erscheinen dort, wo sich die schwarzen Linien der Quelltabelle befinden.
-
Multiple. Dieser Trennlinientyp kann infolge der Tabellenbearbeitung auftreten.

Rasterbildblock
Rasterbildblock
Dieser Blocktyp stellt einen Bildbereich dar, der als Rasterbild behandelt wird. Der von diesem Block umschlossene Teil des Bildes wird nicht erkannt, und der Block wird „wie besehen“ exportiert. Die Eigenschaften dieses Blocktyps werden durch das Objekt RasterPictureBlock dargestellt.
Vektorbildblock
Vektorbildblock
Dieser Blocktyp stellt einen Bildbereich dar, der als Vektorbild behandelt wird. Blöcke dieses Typs können nur dann im Layout erscheinen, wenn eine Seite mit der auf TRUE gesetzten Eigenschaft IPageAnalysisParams::DetectVectorGraphics analysiert wurde. In der Regel werden Hintergrundbilder als Blöcke dieses Typs erkannt. Die Eigenschaften dieses Blocktyps werden durch das Objekt VectorPictureBlock dargestellt.
Barcode-Block
Barcode-Block
Der von einem Block dieses Typs umschlossene Teil des Bildes wird als Barcode behandelt. ABBYY FineReader Engine erkennt Barcodes verschiedener Typen und kann Barcodetypen auch automatisch erkennen. Die aus einem erkannten Barcode ausgelesenen Informationen sind über die barcodespezifischen Eigenschaften des Blocks zugänglich, die durch das Objekt BarcodeBlock dargestellt werden.
Häkchenblock
Häkchenblock
Der von einem Block dieses Typs umschlossene Teil des Bildes wird als Häkchen behandelt. Er entspricht einem Bildbereich, der als Häkchen erkannt wurde. Die aus einem erkannten Häkchen ausgelesenen Informationen sind über die häkchenspezifischen Eigenschaften des Blocks zugänglich, die durch das Objekt CheckmarkBlock dargestellt werden.
Häkchengruppenblock
Häkchengruppenblock
Der von einem Block dieses Typs umschlossene Teil des Bildes wird als Häkchengruppe behandelt. Er entspricht einem Bildbereich, der als Häkchengruppe erkannt wurde. Die aus einer erkannten Häkchengruppe ausgelesenen Informationen sind über die spezifischen Eigenschaften des Häkchengruppenblocks zugänglich, die durch das Objekt CheckmarkGroup dargestellt werden.
Trennlinienblock
Trennlinienblock
Der von einem Block dieses Typs umschlossene Teil des Bildes wird als Trennlinie behandelt. Trennlinien sind Linien, die bei der Seitenlayoutanalyse erkannt werden. Sie können beispielsweise Teile einer Tabelle oder Linien sein, die verschiedene Textelemente voneinander trennen. Die Koordinaten und der Typ einer Trennlinie sind über das Objekt SeparatorBlock zugänglich.
Trennliniengruppenblock
Trennliniengruppenblock
Der von einem Block dieses Typs umschlossene Teil des Bildes wird als Trennliniengruppe behandelt. Er entspricht einem Bildbereich, der als Gruppe von Trennlinien erkannt wurde. Eine Gruppe von Trennlinien umfasst in der Regel vier Trennlinien, die ein Rechteck bilden. Beispielsweise werden vier Linien eines Tabellenrahmens als Trennliniengruppe erkannt. Jede Trennliniengruppe enthält eine Sammlung von Trennlinienblöcken. Die spezifischen Eigenschaften eines Trennliniengruppenblocks werden durch das Objekt SeparatorGroup dargestellt.
Es gibt auch Autoanalyseblöcke, die nur in Visual Components (Teil von FRE für Windows) verwendet werden. Sie können nicht über die FineReader Engine API erstellt oder erkannt werden. Sie sind nur über die Eigenschaft ILayout::VisualBlocks verfügbar.
Blöcke manuell hinzufügen
- Öffnen Sie das Objekt FRPage und rufen Sie das Seitenlayout über die Eigenschaft Layout ab.
- Erstellen Sie für den Block ein Objekt Region mit der Methode IEngine::CreateRegion und fügen Sie ihm mit der Methode IRegion::AddRect Rechtecke hinzu.
- Erstellen Sie einen Block des erforderlichen Typs und fügen Sie ihn mit der Methode AddNew des Objekts LayoutBlocks zur Sammlung der Layoutblöcke hinzu.
- Legen Sie die erforderlichen Parameter des Blocks fest (verwenden Sie dazu das dem Blocktyp entsprechende Eigenschaftenobjekt).
Ändern des Blocktyps
- Erstellen Sie mit der Methode IEngine::CreateRegion ein Region-Objekt und kopieren Sie mit der Methode IRegion::CopyFrom die Region des Blocks, den Sie ersetzen möchten.
- Löschen Sie den alten Block aus dem Layout, indem Sie die Methode ILayoutBlocks::DeleteAt aufrufen.
- Erstellen Sie einen neuen Block des erforderlichen Typs und fügen Sie ihn mit der Methode AddNew des LayoutBlocks-Objekts der Sammlung der Layoutblöcke hinzu. Übergeben Sie dabei die aus dem alten Block kopierte Region als einen der erforderlichen Parameter.
