- Utilisez l’objet 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.
- Utilisez l’objet InprocLoader pour restaurer une copie de la mise en page d’origine à l’aide de la méthode CreateLayoutFromStream. Utilisez cette copie pour parcourir ensuite le contenu de la mise en page.
- 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.
- 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.
- Utilisez l’objet Engine chargé nativement pour restaurer une copie de la mise en page d’origine à l’aide de la méthode CreateLayoutFromStream. Utilisez cette copie pour parcourir ensuite le contenu de la mise en page.
Blocs de mise en page
Bloc de texte
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. Cet objet donne également accès au texte reconnu dans la partie de l’image délimitée par le bloc.
Bloc de tableau
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. La structure du tableau est décrite par deux collections de séparateurs de tableau, horizontaux et verticaux (les objets TableSeparators), ainsi que par une collection de cellules de tableau (l’objet 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.

Bloc d’image matricielle
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.
Bloc d’image vectorielle
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 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.
Bloc Barcode
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 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.
Bloc de coche
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.
Bloc de groupe de coches
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.
Bloc Separator
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.
Bloc de groupe de séparateurs
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.
Il existe également des blocs d’auto-analyse, 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.
Ajout manuel de blocs
- Ouvrez l’objet FRPage et obtenez la mise en page via la propriété Layout.
- Créez un objet Region pour le bloc à l’aide de la méthode IEngine::CreateRegion, puis ajoutez-y des rectangles à l’aide de la méthode IRegion::AddRect.
- 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 de l’objet LayoutBlocks.
- Définissez les paramètres requis du bloc (utilisez l’objet de propriétés du bloc correspondant à son type).
Modification du type de bloc
- Créez un objet Region à l’aide de la méthode IEngine::CreateRegion, puis copiez la Region du bloc que vous devez remplacer à l’aide de la méthode IRegion::CopyFrom.
- Supprimez l’ancien bloc de la mise en page en appelant la méthode ILayoutBlocks::DeleteAt.
- 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 de l’objet LayoutBlocks. Transmettez la Region copiée depuis l’ancien bloc comme l’un des paramètres requis.
