Zum Hauptinhalt springen
Bei der Verarbeitung eines Dokuments analysiert ABBYY FineReader Engine zunächst dessen Layout und erkennt bestimmte Bereiche auf den Dokumentseiten. Diese Bereiche werden als „Blöcke“ bezeichnet. Blöcke bestimmen, wie und in welcher Reihenfolge die Bildbereiche erkannt werden. In ABBYY FineReader Engine dient das Objekt Layout als Speicher für Blöcke und erkannten Text. Die grundlegenden Szenarien der Dokumentverarbeitung arbeiten mit dem Layout innerhalb des Objekts FRDocument, das das zu verarbeitende Dokument repräsentiert. Um auf das Layout einer Dokumentseite zuzugreifen, verwenden Sie die Eigenschaft IFRPage::Layout. Wenn FRE-Benutzer unter Windows oder Linux das Objekt Engine als Out-of-Process-Server geladen haben, können Sie die Iteration des Objekts Layout mit dem folgenden Verfahren beschleunigen: Für Windows:
  1. 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.
  2. 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.
Für Linux:
  1. 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.
  2. 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.
  3. 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.
Die Blöcke, die Sie aus dem Layout einer FRPage abrufen, werden nach dem Aufruf einer Methode, die eine Layout-Analyse durchführt (z. B. Analyze oder Process ), für diese Seite oder das zugehörige Dokument ungültig. Suchen Sie nach der Analyse die benötigten Blöcke im neuen Layout und arbeiten Sie mit den neuen Objekten Block weiter.

Layout-Blöcke

Das Layout-Objekt bietet über die Eigenschaften Blocks und BlackSeparators Zugriff auf die Layout-Struktur. Beide Eigenschaften bieten Zugriff auf die Unterobjekte LayoutBlocks, die Sammlungen von Blöcken darstellen. Die erste Eigenschaft verweist auf die Hauptmenge der Layout-Blöcke, die Texte, Tabellen, Bilder, Barcodes und Häkchen enthält. Die zweite verweist auf die Blocksammlung für Trennlinien. Trennlinien sind schwarze Linien, die bei der Seitenlayoutanalyse erkannt werden. Sie werden für eine präzisere Rekonstruktion des Seitenlayouts bei der Synthese und beim Export verwendet. Außerdem können Sie die Blöcke über die Eigenschaft SortedBlocks des Objekts Layout in logisch sortierter Reihenfolge abrufen. Jeder Block hat eine Region, die aus mehreren Rechtecken besteht. Eine Region wird durch das Objekt Region dargestellt. Je nach Typ der im Block enthaltenen Daten können Blöcke unterschiedliche Typen mit jeweils eigenen spezifischen Eigenschaften haben. Auf diese Eigenschaften kann über die entsprechenden Blocktyp-Objekte zugegriffen werden, die mithilfe der Methoden des Objekts Block abgerufen werden können. Die entsprechenden Blocktyp-Schnittstellen sind von der Schnittstelle IBlock abgeleitet und übernehmen alle ihre Eigenschaften. Die folgenden Blocktypen sind verfügbar:
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.
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. Table
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.
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.
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.
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.
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.
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.
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

Blöcke werden bei der Layout-Analyse automatisch auf einer Seite erkannt. Möglicherweise möchten Sie Blöcke jedoch manuell zeichnen. Gehen Sie in diesem Fall wie folgt vor:
  1. Öffnen Sie das Objekt FRPage und rufen Sie das Seitenlayout über die Eigenschaft Layout ab.
  2. 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.
  3. 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.
  4. Legen Sie die erforderlichen Parameter des Blocks fest (verwenden Sie dazu das dem Blocktyp entsprechende Eigenschaftenobjekt).

Ändern des Blocktyps

Der Blocktyp wird bei der Erstellung festgelegt und kann nicht geändert werden. Wenn Sie den Blocktyp ändern müssen, müssen Sie den Block löschen und an genau derselben Stelle einen neuen Block des erforderlichen Typs erstellen:
  1. 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.
  2. Löschen Sie den alten Block aus dem Layout, indem Sie die Methode ILayoutBlocks::DeleteAt aufrufen.
  3. 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.

Siehe auch

Erkennen von Häkchen Mit Text arbeiten