> ## 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.

# Utilisation de Layout et des blocs

> Utilisez l’objet Layout et les blocs dans ABBYY FineReader Engine : détectez les types de blocs, ajoutez des blocs manuellement et sérialisez les mises en page via SaveToStream / CreateLayoutFromStream pour accélérer le traitement hors processus.

Lors du traitement d’un document, ABBYY FineReader Engine analyse d’abord sa mise en page et détecte certaines zones sur les pages du document. Ces zones sont appelées « blocs ». Les blocs déterminent comment et dans quel ordre les zones de l’image doivent être reconnues.

Dans ABBYY FineReader Engine, l’objet [Layout](/fr/fine-reader/engine/api-reference/layout-related-objects/layout) sert à stocker les blocs et le texte reconnu. Les scénarios de traitement de document de base utilisent la mise en page contenue dans l’objet [FRDocument](/fr/fine-reader/engine/api-reference/document-related-objects/frdocument), qui représente le document en cours de traitement. Pour accéder à la mise en page d’une page de document, utilisez la propriété [IFRPage::Layout](/fr/fine-reader/engine/api-reference/document-related-objects/frpage).

Si les utilisateurs de FRE pour Windows ou Linux utilisent l’objet [Engine](/fr/fine-reader/engine/api-reference/engine-object-iengine-interface) chargé en tant que serveur hors processus, vous pouvez accélérer l’itération de l’objet [Layout](/fr/fine-reader/engine/api-reference/layout-related-objects/layout) selon le schéma suivant :

Pour Windows :

1. Utilisez l’objet [OutprocLoader](/fr/fine-reader/engine/api-reference/engine-loaders/outprocloader) pour traiter un document et obtenir une mise en page pour chaque page. Écrivez la mise en page obtenue dans un flux de données à l’aide de la méthode [SaveToStream](/fr/fine-reader/engine/api-reference/layout-related-objects/layout/savetostream-method).
2. Utilisez l’objet [InprocLoader](/fr/fine-reader/engine/api-reference/engine-loaders/inprocloader) pour restaurer une copie de la mise en page d’origine à l’aide de la méthode [CreateLayoutFromStream](/fr/fine-reader/engine/api-reference/engine-object-iengine-interface/creation-methods/createlayoutfromstream-method). Utilisez cette copie pour parcourir ensuite le contenu de la mise en page.

Pour Linux :

1. Utilisez l’objet Engine chargé en tant que serveur hors processus pour traiter un document et obtenir une mise en page pour chaque page. Écrivez la mise en page obtenue sous forme de tableau d’octets à l’aide de la méthode [SaveToArray](/fr/fine-reader/engine/api-reference/layout-related-objects/layout/savetoarray-method).
2. Utilisez l’objet Engine chargé nativement (c’est-à-dire chargé dans le processus en cours à partir de la bibliothèque libFREngine.so) pour lire le tableau d’octets obtenu à l’aide de votre implémentation de l’interface [IReadStream](/fr/fine-reader/engine/api-reference/supplementary-objects-and-methods/ireadstream).
3. Utilisez l’objet Engine chargé nativement pour restaurer une copie de la mise en page d’origine à l’aide de la méthode [CreateLayoutFromStream](/fr/fine-reader/engine/api-reference/engine-object-iengine-interface/creation-methods/createlayoutfromstream-method). Utilisez cette copie pour parcourir ensuite le contenu de la mise en page.

<Warning>
  Les blocs que vous obtenez à partir de la mise en page d’une [FRPage](/fr/fine-reader/engine/api-reference/document-related-objects/frpage) deviennent invalides après l’appel de l’une des méthodes qui effectuent une analyse de la mise en page (comme [Analyze](/fr/fine-reader/engine/api-reference/document-related-objects/frdocument/analyze-method) ou [Process](/fr/fine-reader/engine/api-reference/document-related-objects/frdocument/process-method) ) pour cette page ou pour le document auquel elle appartient. Après l’analyse, recherchez les blocs dont vous avez besoin dans la nouvelle mise en page et continuez à travailler avec les nouveaux objets [Block](/fr/fine-reader/engine/api-reference/layout-related-objects/block).
</Warning>

<div id="layout-blocks">
  ## Blocs de mise en page
</div>

L’objet Layout donne accès à la structure de mise en page via les propriétés Blocks et BlackSeparators. Ces deux propriétés donnent accès aux sous-objets [LayoutBlocks](/fr/fine-reader/engine/api-reference/layout-related-objects/layoutblocks), qui représentent des collections de blocs. La première désigne l’ensemble principal des blocs de mise en page, qui comprend des textes, des tableaux, des images, des codes-barres et des cases à cocher. La seconde désigne la collection de blocs de séparateurs. Les séparateurs sont des lignes noires détectées lors de l’analyse de la mise en page de la page. Ils sont utilisés pour reconstruire la mise en page avec davantage de précision lors de la synthèse et de l’export.

Vous pouvez également obtenir les blocs dans un ordre logique de tri à l’aide de la propriété [SortedBlocks](/fr/fine-reader/engine/api-reference/layout-related-objects/layout/sortedblocks-property) de l’objet [Layout](/fr/fine-reader/engine/api-reference/layout-related-objects/layout).

Chaque bloc possède sa propre Region, qui se compose de plusieurs rectangles. Une Region est représentée par l’objet [Region](/fr/fine-reader/engine/api-reference/supplementary-objects-and-methods/region).

Selon le type de données contenues dans le bloc, les blocs peuvent être de types différents, chacun ayant ses propres propriétés spécifiques. Ces propriétés sont accessibles via les objets correspondant au type de bloc, qui peuvent être obtenus à l’aide des méthodes de l’objet [Block](/fr/fine-reader/engine/api-reference/layout-related-objects/block). Les interfaces correspondant aux types de blocs dérivent de l’interface [IBlock](/fr/fine-reader/engine/api-reference/layout-related-objects/block) et en héritent toutes les propriétés. Les types de blocs suivants sont disponibles :

<Accordion title="Bloc de texte">
  Ce type de bloc correspond à une zone de l’image reconnue comme du texte formaté. Les propriétés de ce bloc sont accessibles via l’objet [TextBlock](/fr/fine-reader/engine/api-reference/layout-related-objects/textblock). Cet objet donne également accès au texte reconnu dans la partie de l’image délimitée par le bloc.
</Accordion>

<Accordion title="Bloc de tableau">
  Ce type de bloc correspond à un tableau. Les blocs de ce type ne peuvent être que rectangulaires (la Region ne contient qu’un seul rectangle). Les propriétés de ce type de bloc sont accessibles via l’objet [TableBlock](/fr/fine-reader/engine/api-reference/layout-related-objects/tableblock). La structure du tableau est décrite par deux collections de séparateurs de tableau, horizontaux et verticaux (les objets [TableSeparators](/fr/fine-reader/engine/api-reference/layout-related-objects/tableseparators)), ainsi que par une collection de cellules de tableau (l’objet [TableCells](/fr/fine-reader/engine/api-reference/layout-related-objects/tablecells)). Chaque cellule de tableau est traitée comme un bloc d’un certain type. Le texte reconnu est une propriété d’une cellule individuelle, et non du tableau entier. Si une cellule est une image, l’image contenue dans les limites de la cellule n’est pas reconnue et s’affiche comme une image dans le texte reconnu. Les séparateurs de tableau peuvent être de différents types. Un type de séparateur est défini pour un segment de séparateur situé entre ses intersections les plus proches avec d’autres séparateurs. Les séparateurs peuvent être des types suivants :

  * Absent. Ce type est attribué aux séparateurs de tableau qui « devraient traverser » des cellules fusionnées.
  * Inconnu. Ce type est attribué par défaut à chaque séparateur de tableau nouvellement ajouté.
  * Invisible. Ce type est attribué à un séparateur de tableau « imaginaire » créé à la suite de l’analyse de la structure du tableau à un endroit où le tableau source n’en comportait pas, mais où il devrait logiquement y en avoir un.
  * Explicite. Les séparateurs de tableau de ce type apparaissent à l’emplacement des lignes noires du tableau source.
  * Multiple. Ce type de séparateur peut apparaître à la suite de la modification du tableau.

      <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="Bloc d’image matricielle">
  Ce type de bloc représente une zone de l’image traitée comme une image matricielle. La partie de l’image délimitée par ce bloc n’est pas reconnue, et le bloc est exporté « tel quel ». Les propriétés de ce type de bloc sont représentées par l’objet [RasterPictureBlock](/fr/fine-reader/engine/api-reference/layout-related-objects/rasterpictureblock).
</Accordion>

<Accordion title="Bloc d’image vectorielle">
  Ce type de bloc représente une zone de l’image traitée comme une image vectorielle. Les blocs de ce type ne peuvent apparaître dans la mise en page que si une page a été analysée avec la propriété [IPageAnalysisParams::DetectVectorGraphics](/fr/fine-reader/engine/api-reference/parameter-objects/preprocessing-analysis-recognition-and-synthesis-parameters/pageanalysisparams#detectvectorgraphics) définie sur TRUE. En général, les images d’arrière-plan sont reconnues comme des blocs de ce type. Les propriétés de ce type de bloc sont représentées par l’objet [VectorPictureBlock](/fr/fine-reader/engine/api-reference/layout-related-objects/vectorpictureblock).
</Accordion>

<Accordion title="Bloc Barcode">
  Une partie de l’image délimitée par un bloc de ce type est traitée comme un code-barres. ABBYY FineReader Engine reconnaît des codes-barres de plusieurs [types](/fr/fine-reader/engine/specifications/barcode-types) et peut également détecter automatiquement leur type. Les informations lues à partir d’un code-barres reconnu sont accessibles via les propriétés spécifiques du bloc Barcode, représentées par l’objet [BarcodeBlock](/fr/fine-reader/engine/api-reference/layout-related-objects/barcodeblock).
</Accordion>

<Accordion title="Bloc de coche">
  Une partie de l’image délimitée par un bloc de ce type est traitée comme une coche. Elle correspond à une zone de l’image reconnue comme une coche. Les informations lues à partir d’une coche reconnue sont accessibles via les propriétés spécifiques du bloc de coche, représentées par l’objet [CheckmarkBlock](/fr/fine-reader/engine/api-reference/layout-related-objects/checkmarkblock).
</Accordion>

<Accordion title="Bloc de groupe de coches">
  Une partie de l’image délimitée par un bloc de ce type est traitée comme un groupe de coches. Elle correspond à une zone de l’image reconnue comme un groupe de coches. Les informations lues à partir d’un groupe de coches reconnu sont accessibles via les propriétés spécifiques du bloc de groupe de coches, représentées par l’objet [CheckmarkGroup](/fr/fine-reader/engine/api-reference/layout-related-objects/checkmarkgroup).
</Accordion>

<Accordion title="Bloc Separator">
  Une partie de l’image délimitée par un bloc de ce type est traitée comme un séparateur. Les séparateurs sont des lignes détectées lors de l’analyse de la mise en page. Ils peuvent faire partie d’un tableau, séparer différents éléments de texte, etc. Les coordonnées et le type d’un séparateur sont accessibles via l’objet [SeparatorBlock](/fr/fine-reader/engine/api-reference/layout-related-objects/separatorblock).
</Accordion>

<Accordion title="Bloc de groupe de séparateurs">
  Une partie de l’image délimitée par un bloc de ce type est traitée comme un groupe de séparateurs. Elle correspond à une zone de l’image reconnue comme un groupe de séparateurs. Un groupe de séparateurs comprend généralement quatre séparateurs qui forment un rectangle. Par exemple, les quatre lignes de bordure d’un tableau sont reconnues comme un groupe de séparateurs. Chaque groupe de séparateurs contient une collection de blocs séparateurs. Les propriétés spécifiques d’un bloc de groupe de séparateurs sont représentées par l’objet [SeparatorGroup](/fr/fine-reader/engine/api-reference/layout-related-objects/separatorgroup).
</Accordion>

<Note>
  Il existe également des [blocs d’auto-analyse](/fr/fine-reader/engine/api-reference/layout-related-objects/autoanalysisblock), qui sont utilisés uniquement dans Visual Components (une partie de FRE pour Windows). Ils ne peuvent pas être créés ni reconnus via l’API FineReader Engine. Ils sont disponibles uniquement via la propriété [ILayout::VisualBlocks](/fr/fine-reader/engine/api-reference/layout-related-objects/layout#visualblocks).
</Note>

<div id="adding-blocks-manually">
  ## Ajout manuel de blocs
</div>

Les blocs sont détectés automatiquement sur une page lors de l’analyse de la mise en page. Mais vous pouvez aussi vouloir tracer des blocs manuellement. Dans ce cas :

1. Ouvrez l’objet [FRPage](/fr/fine-reader/engine/api-reference/document-related-objects/frpage) et obtenez la mise en page via la propriété [Layout](/fr/fine-reader/engine/api-reference/document-related-objects/frpage#layout).
2. Créez un objet [Region](/fr/fine-reader/engine/api-reference/supplementary-objects-and-methods/region) pour le bloc à l’aide de la méthode [IEngine::CreateRegion](/fr/fine-reader/engine/api-reference/engine-object-iengine-interface/creation-methods/createlessobjectgreater-methods), puis ajoutez-y des rectangles à l’aide de la méthode [IRegion::AddRect](/fr/fine-reader/engine/api-reference/supplementary-objects-and-methods/region/addrect-method).
3. Créez un bloc du type requis et ajoutez-le à la collection des blocs de mise en page à l’aide de la méthode [AddNew](/fr/fine-reader/engine/api-reference/layout-related-objects/layoutblocks/addnew-method) de l’objet LayoutBlocks.
4. Définissez les paramètres requis du bloc (utilisez l’objet de propriétés du bloc correspondant à son type).

<div id="changing-the-block-type">
  ## Modification du type de bloc
</div>

Le type de bloc est défini lors de sa création et ne peut pas être modifié. Si vous devez changer le type de bloc, vous devrez supprimer le bloc et en créer un autre du type requis exactement au même endroit :

1. Créez un objet [Region](/fr/fine-reader/engine/api-reference/supplementary-objects-and-methods/region) à l’aide de la méthode [IEngine::CreateRegion](/fr/fine-reader/engine/api-reference/engine-object-iengine-interface/creation-methods/createlessobjectgreater-methods), puis copiez la Region du bloc que vous devez remplacer à l’aide de la méthode [IRegion::CopyFrom](/fr/fine-reader/engine/visual-components-reference/supplementary-objects/spellwordcollection/copyfrom-method).
2. Supprimez l’ancien bloc de la mise en page en appelant la méthode [ILayoutBlocks::DeleteAt](/fr/fine-reader/engine/visual-components-reference/supplementary-objects/spellwordcollection/deleteat-method).
3. Créez un nouveau bloc du type requis et ajoutez-le à la collection de blocs de mise en page à l’aide de la méthode [AddNew](/fr/fine-reader/engine/api-reference/layout-related-objects/layoutblocks/addnew-method) de l’objet LayoutBlocks. Transmettez la Region copiée depuis l’ancien bloc comme l’un des paramètres requis.

<div id="see-also">
  ## Voir aussi
</div>

[Reconnaissance des coches](/fr/fine-reader/engine/guided-tour/advanced-techniques/recognizing-checkmarks)

[Utilisation du texte](/fr/fine-reader/engine/guided-tour/advanced-techniques/working-with-text)
