Passer au contenu principal
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 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, 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. Si les utilisateurs de FRE pour Windows ou Linux utilisent l’objet Engine chargé en tant que serveur hors processus, vous pouvez accélérer l’itération de l’objet Layout selon le schéma suivant : Pour Windows :
  1. 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.
  2. 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.
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.
  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.
  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. Utilisez cette copie pour parcourir ensuite le contenu de la mise en page.
Les blocs que vous obtenez à partir de la mise en page d’une FRPage deviennent invalides après l’appel de l’une des méthodes qui effectuent une analyse de la mise en page (comme Analyze ou Process ) 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.

Blocs de mise en page

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, 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 de l’objet Layout. Chaque bloc possède sa propre Region, qui se compose de plusieurs rectangles. Une Region est représentée par l’objet 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. Les interfaces correspondant aux types de blocs dérivent de l’interface IBlock et en héritent toutes les propriétés. Les types de blocs suivants sont disponibles :
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.
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. Table
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.
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.
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.
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.
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.
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.
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

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 et obtenez la mise en page via la propriété Layout.
  2. 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.
  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 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).

Modification du type de bloc

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 à 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.
  2. Supprimez l’ancien bloc de la mise en page en appelant la méthode ILayoutBlocks::DeleteAt.
  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 de l’objet LayoutBlocks. Transmettez la Region copiée depuis l’ancien bloc comme l’un des paramètres requis.

Voir aussi

Reconnaissance des coches Utilisation du texte