> ## Documentation Index
> Fetch the complete documentation index at: https://docs.abbyy.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Arbeiten mit Layout und Blöcken

> Arbeiten Sie mit dem Layout-Objekt und den Blöcken in ABBYY FineReader Engine: Erkennen Sie Blocktypen, fügen Sie Blöcke manuell hinzu und serialisieren Sie Layouts mit SaveToStream / CreateLayoutFromStream, um Out-of-Process-Ausführungen zu beschleunigen.

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](/de/fine-reader/engine/api-reference/layout-related-objects/layout) als Speicher für Blöcke und erkannten Text. Die grundlegenden Szenarien der Dokumentverarbeitung arbeiten mit dem Layout innerhalb des Objekts [FRDocument](/de/fine-reader/engine/api-reference/document-related-objects/frdocument), das das zu verarbeitende Dokument repräsentiert. Um auf das Layout einer Dokumentseite zuzugreifen, verwenden Sie die Eigenschaft [IFRPage::Layout](/de/fine-reader/engine/api-reference/document-related-objects/frpage).

Wenn FRE-Benutzer unter Windows oder Linux das Objekt [Engine](/de/fine-reader/engine/api-reference/engine-object-iengine-interface) als Out-of-Process-Server geladen haben, können Sie die Iteration des Objekts [Layout](/de/fine-reader/engine/api-reference/layout-related-objects/layout) mit dem folgenden Verfahren beschleunigen:

Für Windows:

1. Verwenden Sie das Objekt [OutprocLoader](/de/fine-reader/engine/api-reference/engine-loaders/outprocloader), um ein Dokument zu verarbeiten und ein Layout für jede Seite abzurufen. Schreiben Sie das erhaltene Layout mit der Methode [SaveToStream](/de/fine-reader/engine/api-reference/layout-related-objects/layout/savetostream-method) in einen Datenstrom.
2. Verwenden Sie das Objekt [InprocLoader](/de/fine-reader/engine/api-reference/engine-loaders/inprocloader), um mit der Methode [CreateLayoutFromStream](/de/fine-reader/engine/api-reference/engine-object-iengine-interface/creation-methods/createlayoutfromstream-method) 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](/de/fine-reader/engine/api-reference/layout-related-objects/layout/savetoarray-method) 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](/de/fine-reader/engine/api-reference/supplementary-objects-and-methods/ireadstream) zu lesen.
3. Verwenden Sie das nativ geladene Objekt Engine, um mit der Methode [CreateLayoutFromStream](/de/fine-reader/engine/api-reference/engine-object-iengine-interface/creation-methods/createlayoutfromstream-method) eine Kopie des ursprünglichen Layouts wiederherzustellen. Verwenden Sie diese Kopie für die weitere Iteration des Layout-Inhalts.

<Warning>
  Die Blöcke, die Sie aus dem Layout einer [FRPage](/de/fine-reader/engine/api-reference/document-related-objects/frpage) abrufen, werden nach dem Aufruf einer Methode, die eine Layout-Analyse durchführt (z. B. [Analyze](/de/fine-reader/engine/api-reference/document-related-objects/frdocument/analyze-method) oder [Process](/de/fine-reader/engine/api-reference/document-related-objects/frdocument/process-method) ), 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](/de/fine-reader/engine/api-reference/layout-related-objects/block) weiter.
</Warning>

<div id="layout-blocks">
  ## Layout-Blöcke
</div>

Das Layout-Objekt bietet über die Eigenschaften Blocks und BlackSeparators Zugriff auf die Layout-Struktur. Beide Eigenschaften bieten Zugriff auf die Unterobjekte [LayoutBlocks](/de/fine-reader/engine/api-reference/layout-related-objects/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](/de/fine-reader/engine/api-reference/layout-related-objects/layout/sortedblocks-property) des Objekts [Layout](/de/fine-reader/engine/api-reference/layout-related-objects/layout) in logisch sortierter Reihenfolge abrufen.

Jeder Block hat eine Region, die aus mehreren Rechtecken besteht. Eine Region wird durch das Objekt [Region](/de/fine-reader/engine/api-reference/supplementary-objects-and-methods/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](/de/fine-reader/engine/api-reference/layout-related-objects/block) abgerufen werden können. Die entsprechenden Blocktyp-Schnittstellen sind von der Schnittstelle [IBlock](/de/fine-reader/engine/api-reference/layout-related-objects/block) abgeleitet und übernehmen alle ihre Eigenschaften. Die folgenden Blocktypen sind verfügbar:

<Accordion title="Textblock">
  Dieser Blocktyp entspricht einem Bildbereich, der als formatierter Text erkannt wird. Auf die Eigenschaften dieses Blocks kann über das Objekt [TextBlock](/de/fine-reader/engine/api-reference/layout-related-objects/textblock) zugegriffen werden. Dieses Objekt bietet außerdem Zugriff auf den erkannten Text aus dem vom Block umschlossenen Bildbereich.
</Accordion>

<Accordion title="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](/de/fine-reader/engine/api-reference/layout-related-objects/tableblock) zugegriffen werden. Die Struktur der Tabelle wird durch zwei Sammlungen von Tabellentrennlinien beschrieben, horizontal und vertikal (die Objekte [TableSeparators](/de/fine-reader/engine/api-reference/layout-related-objects/tableseparators)), sowie durch eine Sammlung von Tabellenzellen (das Objekt [TableCells](/de/fine-reader/engine/api-reference/layout-related-objects/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.

      <img src="https://mintcdn.com/abbyy/i-EfCQVmseNiPQcp/images/fine-reader/engine/table.gif?s=2a6a846ffbbde2b5a7ef328bc18c0851" alt="Table" width="332" height="239" data-path="images/fine-reader/engine/table.gif" />
</Accordion>

<Accordion title="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](/de/fine-reader/engine/api-reference/layout-related-objects/rasterpictureblock) dargestellt.
</Accordion>

<Accordion title="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](/de/fine-reader/engine/api-reference/parameter-objects/preprocessing-analysis-recognition-and-synthesis-parameters/pageanalysisparams#detectvectorgraphics) analysiert wurde. In der Regel werden Hintergrundbilder als Blöcke dieses Typs erkannt. Die Eigenschaften dieses Blocktyps werden durch das Objekt [VectorPictureBlock](/de/fine-reader/engine/api-reference/layout-related-objects/vectorpictureblock) dargestellt.
</Accordion>

<Accordion title="Barcode-Block">
  Der von einem Block dieses Typs umschlossene Teil des Bildes wird als Barcode behandelt. ABBYY FineReader Engine erkennt Barcodes verschiedener [Typen](/de/fine-reader/engine/specifications/barcode-types) 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](/de/fine-reader/engine/api-reference/layout-related-objects/barcodeblock) dargestellt werden.
</Accordion>

<Accordion title="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](/de/fine-reader/engine/api-reference/layout-related-objects/checkmarkblock) dargestellt werden.
</Accordion>

<Accordion title="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](/de/fine-reader/engine/api-reference/layout-related-objects/checkmarkgroup) dargestellt werden.
</Accordion>

<Accordion title="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](/de/fine-reader/engine/api-reference/layout-related-objects/separatorblock) zugänglich.
</Accordion>

<Accordion title="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](/de/fine-reader/engine/api-reference/layout-related-objects/separatorgroup) dargestellt.
</Accordion>

<Note>
  Es gibt auch [Autoanalyseblöcke](/de/fine-reader/engine/api-reference/layout-related-objects/autoanalysisblock), 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](/de/fine-reader/engine/api-reference/layout-related-objects/layout#visualblocks) verfügbar.
</Note>

<div id="adding-blocks-manually">
  ## Blöcke manuell hinzufügen
</div>

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](/de/fine-reader/engine/api-reference/document-related-objects/frpage) und rufen Sie das Seitenlayout über die Eigenschaft [Layout](/de/fine-reader/engine/api-reference/document-related-objects/frpage#layout) ab.
2. Erstellen Sie für den Block ein Objekt [Region](/de/fine-reader/engine/api-reference/supplementary-objects-and-methods/region) mit der Methode [IEngine::CreateRegion](/de/fine-reader/engine/api-reference/engine-object-iengine-interface/creation-methods/createlessobjectgreater-methods) und fügen Sie ihm mit der Methode [IRegion::AddRect](/de/fine-reader/engine/api-reference/supplementary-objects-and-methods/region/addrect-method) Rechtecke hinzu.
3. Erstellen Sie einen Block des erforderlichen Typs und fügen Sie ihn mit der Methode [AddNew](/de/fine-reader/engine/api-reference/layout-related-objects/layoutblocks/addnew-method) 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).

<div id="changing-the-block-type">
  ## Ändern des Blocktyps
</div>

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](/de/fine-reader/engine/api-reference/engine-object-iengine-interface/creation-methods/createlessobjectgreater-methods) ein [Region](/de/fine-reader/engine/api-reference/supplementary-objects-and-methods/region)-Objekt und kopieren Sie mit der Methode [IRegion::CopyFrom](/de/fine-reader/engine/visual-components-reference/supplementary-objects/spellwordcollection/copyfrom-method) 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](/de/fine-reader/engine/visual-components-reference/supplementary-objects/spellwordcollection/deleteat-method) aufrufen.
3. Erstellen Sie einen neuen Block des erforderlichen Typs und fügen Sie ihn mit der Methode [AddNew](/de/fine-reader/engine/api-reference/layout-related-objects/layoutblocks/addnew-method) des LayoutBlocks-Objekts der Sammlung der Layoutblöcke hinzu. Übergeben Sie dabei die aus dem alten Block kopierte Region als einen der erforderlichen Parameter.

<div id="see-also">
  ## Siehe auch
</div>

[Erkennen von Häkchen](/de/fine-reader/engine/guided-tour/advanced-techniques/recognizing-checkmarks)

[Mit Text arbeiten](/de/fine-reader/engine/guided-tour/advanced-techniques/working-with-text)
