Zum Hauptinhalt springen
FlexiLayout-Blöcke entsprechen Feldern in Dokumenten, aus denen Daten erfasst werden müssen. Ein Block gibt den Datentyp an, den das Feld enthalten kann, sowie die Koordinaten des Bildbereichs, in dem sich das Feld voraussichtlich befindet. Der Zweig „Block“ ist im FlexiLayout-Baum mit Blocksymbol im Baum gekennzeichnet.

FlexiLayout-Blocktypen

ABBYY FlexiLayout™ Studio unterstützt die folgenden Blocktypen:
BlocktypSymbolBeschreibung
TextSymbol für TextblockWird zum Extrahieren von Textdaten verwendet.
BarcodeSymbol für BarcodeblockWird zum Lesen von Barcodes verwendet.
CheckmarkSymbol für HäkchenblockWird zum Erkennen von Häkchen verwendet.
PictureSymbol für BildblockWird zum Verarbeiten von Objekten verwendet, die bei der Vorerkennung nicht als Text identifiziert wurden.
TableSymbol für TabellenblockWird zum Extrahieren von Daten aus Tabellen verwendet.
GroupSymbol für GruppenblockWird zum logischen Gruppieren von Blöcken verwendet.
Checkmark GroupSymbol für HäkchengruppenblockWird zum Erstellen von Häkchengruppen verwendet. Zu diesem Gruppentyp können nur Häkchenblöcke hinzugefügt werden. Blöcke anderer Typen können hier weder erstellt noch verschoben werden.
wiederholbare GruppeSymbol für Block vom Typ wiederholbare GruppeWird zum Erstellen einer wiederholbaren Gruppe von Blöcken verwendet.
Non-RecognizedSymbol für nicht erkannten BlockWird verwendet, um einen Bereich von der Erkennung auszuschließen.
Das Erweitern der Regionen von Textblöcken kann die Erkennungsqualität verbessern. Um eine Region zu erweitern, doppelklicken Sie auf das Element Block, um das Dialogfeld Properties zu öffnen, und geben Sie die vertikalen und horizontalen Werte für die Eigenschaft Blocks result region inflate an. Blöcke, für die in mindestens einer Layout-Alternative kein Bildbereich angegeben ist, haben in der oberen rechten Ecke des Symbols ein leeres Quadrat: Symbol für undefinierten Block. Wenn nur ein FlexiLayout ausgewählt ist (über den Eintrag Select Layout im Kontextmenü des Elements, über denselben Eintrag im Abschnitt FlexiLayout oder über den Eintrag Select Alternative Layout im Kontextmenü des FlexiLayout), prüft das Programm den Bildbereich nur in diesem FlexiLayout.
Daten aus den Blöcken werden in einer Datenerfassungsanwendung wie ABBYY FlexiCapture extrahiert.

Blockeigenschaften

Ein Block hat die folgenden Eigenschaften:
EigenschaftBeschreibung
NameDer Name des Blocks. Er kann Buchstaben (lateinische Zeichen, lateinische Zeichen mit diakritischen Zeichen, kyrillische Zeichen), Ziffern und Unterstriche enthalten. Er muss mit einem Buchstaben oder einem Unterstrich beginnen und darf keine Leerzeichen oder Sonderzeichen enthalten.
TypeDer Typ des Blocks, der beim Erstellen ausgewählt wird. Er muss dem Typ der Objekte entsprechen, die sich in dem vom Block umschlossenen Bereich befinden.
CommentEin optionaler Comment, der vom Benutzer eingegeben wird.
Has repeating instancesZeigt an, dass der Block aus mehreren Instanzen besteht. Wählen Sie diese Eigenschaft aus, wenn beispielsweise alle Instanzen eines Elements vom Typ wiederholbare Gruppe als Blockregion verwendet werden.
Sortierreihenfolge der InstanzenLegt die Reihenfolge fest, in der Gruppeninstanzen zu einem Block zusammengeführt werden. Nur verfügbar, wenn Has repeating instances ausgewählt ist.
Die Eigenschaft Sortierreihenfolge der Instanzen hat die folgenden Werte:
SortierreihenfolgeVerhalten
Von oben nach untenFührt die Instanzen entsprechend ihrer Position im Bild von oben nach unten zu einem Block zusammen.
Von links nach rechtsFührt die Instanzen entsprechend ihrer Position im Bild von links nach rechts zu einem Block zusammen.
Von rechts nach linksFührt die Instanzen entsprechend ihrer Position im Bild von rechts nach links zu einem Block zusammen.
In der Reihenfolge des AuffindensFührt die Instanzen in der Reihenfolge zu einem Block zusammen, in der Hypothesen erzeugt werden. Die Hypothesen werden in absteigender Quality erzeugt.
Wenn Sie bei In der Reihenfolge des Auffindens zusätzliche Bedingungen für Instanzen angeben, werden die Hypothesen in der benutzerdefinierten Reihenfolge erzeugt. Wenn Sie eine andere Reihenfolge als die vom Programm verwendete Standardreihenfolge benötigen, können Sie diese mithilfe zusätzlicher Bedingungen festlegen. Die folgenden Eigenschaften legen den Bereich im Bild fest, aus dem Daten extrahiert werden sollen.

For Layout

Wählt die Layout-Alternative aus, in der der Suchbereich angegeben ist.

Source element

Gibt einen Bereich im Bild an, der mit der Region des Elements identisch ist, das verwendet wird, um den Block im Bild zu finden. Wenn das FlexiLayout auf das Bild angewendet wird, sucht das Programm nach dem Objekt bzw. den Objekten, die durch das Element beschrieben werden. Die Daten werden aus diesen Objekten erfasst. Für eine wiederholbare Gruppe können Sie entweder eine der Instanzen auswählen oder alle Instanzen verwenden (AllInstances). Weitere Informationen finden Sie unter Verwenden von Instanzen einer wiederholbaren Gruppe als Referenz-, Ausschluss- oder Quellelemente.

Ausdruck

Legt einen Bereich im Bild fest, der mit keiner der Elementregionen übereinstimmt. Sie können zum Beispiel die Regionen einiger Elemente und den Raum zwischen ihnen zu einem Block zusammenführen, die Region eines Elements um einen bestimmten Wert erweitern oder die Koordinaten des Blocks angeben, ohne auf Elemente Bezug zu nehmen. In diesem Fall kann die Region des Blocks in der FlexiLayout-Sprache beschrieben werden.
Die Region eines Blocks ist zusammenhängend. Das bedeutet: Wenn Sie eine Region aus getrennt liegenden Rectangles erstellen, werden die Zwischenräume durch schmale zusätzliche Rectangles gefüllt, damit die Region zusammenhängend wird.
Ein Block kann jedoch aus mehreren Regionen bestehen, wenn alle Instanzen einer wiederholbaren Gruppe als Referenzelement verwendet werden. Die Region eines Gruppenblocks wird anhand der Regionen der untergeordneten Blöcke berechnet, genau wie die Region der Hypothesen. Die resultierende Region wird für eine bessere Darstellung leicht erweitert.

Parameter von Blöcken vom Typ Gruppe und wiederholbare Gruppe

Eine Häkchengruppe und eine normale Gruppe von Blöcken haben außer Name und Comment keine weiteren Parameter. Die Parameter einer wiederholbaren Gruppe von Blöcken sind dieselben wie bei Blöcken, die keiner Gruppe angehören. Die Option Has repeating instances ist für sie immer aktiviert. Untergeordnete Blöcke können die Option Has repeating instances haben oder nicht, aber für sie wird immer die Variable OutputInstances erstellt. Wenn ein Block innerhalb einer wiederholbaren Gruppe von Blöcken die Option Has repeating instances hat, bedeutet das, dass er sich innerhalb jeder Instanz des übergeordneten Blocks wiederholen kann.

Eine Blockregion mithilfe von Instanzen einer wiederholbaren Gruppe angeben

Wenn ein Block über mehrere Instanzen definiert wird, besteht die Blockregion aus mehreren separaten Regionen. Wenn Sie eine bestimmte Instanz einer wiederholbaren Gruppe verwenden (zum Beispiel LastFound), wird die Blockregion wie bei jedem anderen Element definiert. Sie können jedoch auch alle erkannten Instanzen verwenden (AllInstances). Um mehrere Instanzen zu verwenden, aktivieren Sie die Option Has repeating instances. Sie können auch Code für den Block schreiben und dabei die vordefinierte Variable OutputInstances verwenden. Zum Beispiel:
OutputInstances = SearchElements.PageHeader.AllInstances.UnionRect;
ABBYY FlexiCapture verarbeitet Blöcke mit der aktivierten Option Has repeating instances wie folgt:
  • Bei Blöcken, die keine Tabellenblöcke sind, sind die angegebenen Instanzen die Instanzen des entsprechenden Felds.
  • Bei einem Tabellenblock werden die angegebenen Instanzen als eine einzige Instanz des Felds behandelt. Das heißt, ABBYY FlexiCapture verarbeitet einen solchen Block als ein Feld vom Typ Table mit einer nicht zusammenhängenden Region.

Regeln zum Erstellen von Verweisen auf Elemente für wiederholbare Gruppen von Blöcken

Eine wiederholbare Gruppe von Blöcken verweist auf ein wiederholbares Element. Um Instanzen einer wiederholbaren Gruppe von Blöcken zu erstellen, benötigen Sie mehrere Elementinstanzen. Daher muss eine der IDs AllInstances sein. Da die unter dem Element mit AllInstances verschachtelten Elemente keine anderen IDs haben können, bedeutet diese Bedingung auch, dass das unterste wiederholbare Element AllInstances haben muss. Untergeordnete Blöcke einer wiederholbaren Gruppe von Blöcken verweisen auf untergeordnete Elemente der Gruppe von Elementen, auf die der übergeordnete Block verweist. Der Verweis muss für die Instanzen dieselbe ID haben. Wenn ein Block einer wiederholbaren Gruppe beispielsweise den Verweis SearchElements..RepGr1.Instance(1).RepGr2.AllInstances hat, können sich seine untergeordneten Blöcke nur wie folgt auf das Element RepGr1..RepGr2.Element beziehen:
SearchElements.RepGr1.Instance(1).RepGr2.AllInstances.Element
Wenn kein Attribut HasRepeatingInstances vorhanden ist, können Sie nur auf Subelemente der Basisgruppe verweisen, die selbst keine Wiederholungen enthalten, und umgekehrt. Wenn ein Attribut HasRepeatingInstances vorhanden ist, können Sie auf Elemente verweisen, die innerhalb der Basisgruppe Wiederholungen enthalten (dabei können Sie nur auf alle Instanzen gleichzeitig verweisen).
With a HasRepeatingInstances attribute
SearchElements.RepGr1.Instance(1).RepGr2.AllInstances.RepGr3.AllInstances.Element
SearchElements.RepGr1.Instance(1).RepGr2.AllInstances.RepGr3.AllInstances.RepGr4.AllInstances.Element
Without a HasRepeatingInstances attribute
SearchElements.RepGr1.Instance(1).RepGr2.AllInstances.Gr3.SubElement(where Gr3 is a simple group)
SearchElements.RepGr1.Instance(1).RepGr2.AllInstances.SubElement
Wenn Referenzen über Source element erstellt werden, erfolgt die Prüfung beim Erstellen des FlexiLayouts. Wenn Referenzen mit Advanced-Code erstellt werden, wird beim Abgleich des FlexiLayouts ein Fehler festgestellt.

Eine Blockregion mit der FlexiLayout-Sprache beschreiben

Verwenden Sie zum Angeben der Region eines Blocks das Feld Ausdruck. Welche vordefinierte Variable verwendet wird, hängt vom Typ des Blocks und davon ab, ob für ihn die Option Has repeating instances ausgewählt ist:
VariableTyp
OutputRegionRegion
OutputTableTableHypothesis
OutputInstancesHypothesisInstances oder TableHypothesisInstances
Weitere Informationen zu den vordefinierten Variablen, die im Feld Ausdruck verwendet werden können, finden Sie unter Vordefinierte Variablen.
AufgabeBeispielcode
Die Region eines Elements abrufen und um 3 mm in der Breite und 5 mm in der Länge erweiternOutputRegion = SomeElement.Rect; OutputRegion.Inflate( 3*mm, 5*mm );
Die Rechtecke der Regionen zweier Elemente zusammenführen und das Rechteck abrufen, das die zusammengeführten Rechtecke umschließtRect outputRect; outputRect = Element1.Rect Or Element2.Rect; OutputRegion = outputRect;
Die Rechtecke, die die Regionen zweier Elemente umschließen, zu einer Region zusammenführenRectArray outputRects; outputRects = RectArray( Element1.Rect ); outputRects.Add: Element2.Rect; OutputRegion = Region( outputRects );
Die Regionen der Objekte, die zwei verschiedenen Elementen entsprechen, zu einer Region zusammenführenRectArray outputRects; outputRects = Element1.Rects; outputRects.Add( Element2.Rects ); OutputRegion = outputRects.Region;
Die Regionen der Objekte zusammenführen, die zur Region von Element1 gehören, und die Regionen der Objekte entfernen, die zur Region von Element2 gehörenOutputRegion = FormRegion( Element1.Rects, Element2.Rects );
Ein Table-Element verwenden, um einen Table-Block anzugebenOutputTable = SearchElements.TableElement;
Hypotheseninstanzen für ein bestimmtes Element verwenden, um einen Table-Block anzugebenOutputInstances = SearchElements.RepeatingGroup.AllInstances.TemplateElement;

Die Variable IsNull verwenden

Sie können auch eine vordefinierte Variable IsNull verwenden, um die Region eines Blocks zu beschreiben. Diese Variable gibt an, ob die Region des Blocks beim Abgleich des FlexiLayouts gefunden wurde. Der Wert false bedeutet, dass die Region gefunden wurde. Der Wert true bedeutet, dass sie nicht gefunden wurde. Die Variable IsNull wird mit dem Wert false initialisiert. Das bedeutet, dass die Region des Blocks zunächst als gefunden gilt. Manchmal müssen Sie jedoch bestimmte Bedingungen prüfen, bevor Sie eine Entscheidung treffen. Wenn das Programm die Region des Blocks nur dann als gefunden betrachten soll, wenn die Breite der Region des Source element größer als 50 dots ist, geben Sie den folgenden Code in das Feld Region expression ein:
if Element1.Width < 50dt then IsNull = true;
Wenn das Programm die Region des Blocks nur dann als gefunden betrachten soll, wenn Element1 gefunden wurde, geben Sie den folgenden Code in das Feld Region expression ein:
IsNull = Element1.IsNull
Angenommen, Sie müssen Element1 und Element2 verwenden, um nach einem Block zu suchen. Wenn mindestens eines der Elemente nicht gefunden wurde, gilt der Block als nicht gefunden:
Rect outputRect;
Let FieldLeft = Element1.Rect.Left;
Let FieldRight = Element2.Rect.Right;
Let FieldTop = Element1.Rect.Top;
Let FieldBottom = Element2.Rect.Bottom;
outputRect = Rect( FieldLeft, FieldTop, FieldRight, FieldBottom);
if ((Element1.IsNull == True) or (Element2.IsNull == True) ) then {IsNull = true;}
OutputRegion = outputRect;
Dieser Code funktioniert nur dann korrekt, wenn sich der Suchbereich von Element1 oberhalb und links vom Suchbereich von Element2 befindet.Im vorherigen Beispiel wird diese Bedingung der Einfachheit halber nicht geprüft. Im tatsächlichen Code ist diese Prüfung jedoch erforderlich, und die Werte der Variablen FieldLeft, FieldRight, FieldTop und FieldBottom müssen entsprechend angepasst werden. Andernfalls führt der Aufruf der Funktion Rect zu einem Fehler.