Wie das Dummy-Element signalisiert, dass die Bedingungen erfüllt sind
Dieses Hilfselement wird so erstellt, dass es auf den Bildern immer etwas finden kann, sofern die FunktionDontFind() (also „die Suche beenden“) nicht aktiviert ist. Die Anzahl der Hypothesen sollte nicht zu groß sein, damit der Hypothesenbaum nicht unnötig aufgebläht und die Zeit für den Abgleich des FlexiLayouts nicht erhöht wird.
Um dies zu erreichen, können Sie beispielsweise Elemente der Typen Object Collection oder Paragraph verwenden. Diese Elemente erzeugen immer genau eine Hypothese, die alle Objekte des angegebenen Typs aus dem Suchbereich umfasst.
Der Abschnitt Advanced pre-search relations des Dummy-Elements enthält die Bedingungen zur Prüfung einiger Elemente, die sich im Projektbaum unterhalb des Dummy-Elements befinden. Wenn alle Bedingungen erfüllt sind, wird für das Dummy-Element die Funktion DontFind() aufgerufen.
In diesem Fall wird für das Dummy-Element eine Nullhypothese erzeugt. Sie dient dann als Marker dafür, dass alle Bedingungen erfüllt sind, wenn FlexiLayout Studio mit der Suche nach anderen Elementen beginnt. Dadurch wird FlexiLayout Studio mitgeteilt, dass nur die IsNull-Prüfung des Dummy-Elements ausgeführt werden soll, anstatt dieselben umfangreichen Bedingungen für mehrere Elemente zu prüfen.
Diese Methode trägt dazu bei, den Code aussagekräftiger zu machen. Wenn Sie die Bedingungen bearbeiten müssen, können Sie dies außerdem nur in der Beschreibung des Dummy-Elements tun. Das verringert die Wahrscheinlichkeit logischer und syntaktischer Fehler beim Duplizieren des Codes.
Für künftige Versionen des Produkts ist geplant, die Erstellung von Variablen im Bereich der Subelemente von Gruppen zu unterstützen. Die Ergebnisse der Prüfung der Bedingungen werden dann in den Werten verschiedener Variablen gespeichert.Die aktuelle Methode ist eine vorübergehende Lösung (Workaround), die dabei hilft, den Code in den Advanced-Abschnitten in der aktuellen Version von FlexiLayout Studio zu vereinfachen.
Die beiden Rechnungslayouts im Beispielprojekt
Das Project1.fsp (Ordner %public%\ABBYY\FlexiCapture\12.0\Samples\FLS\Tips and Tricks\Auxiliary element) zeigt, wie diese Methode funktioniert.
Auf diesen Bildern sollen die folgenden Felder gefunden werden: „Rechnungsnummer“, „Rechnungsdatum“, „Firmenname“ und „Firmenadresse“.
Angenommen, es müssen Rechnungen von zwei verschiedenen Typen verarbeitet werden:
- Die Felder „Firmenname“ und „Firmenadresse“ befinden sich oberhalb des Feldes „Rechnungsnummer“.
- Die Felder „Firmenname“ und „Firmenadresse“ befinden sich unterhalb des Feldes „Rechnungsnummer“.
Nach dem Datumsfeld mit zwei Gruppen von Einschränkungen suchen
Das Projekt enthält ein Group-Element InvoiceGroup mit den Elementen InvoiceHeader, InvoiceNum und DateHeader sowie ein Group-Element DateGroup. Diese Subelemente sind erforderlich, um Feldnamen sowie die Felder “Rechnungsnummer” und “Rechnungsdatum” zu erkennen.Weitere Informationen zu den Methoden der Datumssuche finden Sie unter Datumssuche nach Erkennung hoher oder niedriger Qualität. In diesem Abschnitt werden nur die Einschränkungen für die Datumssuche im aktuellen Projekt beschrieben.
if not DateHeader.IsNull wird geprüft), wird die Suche relativ zum Namen des Datumsfelds durchgeführt: rechts vom Namen, auf derselben horizontalen Ebene, mit einem gewissen Toleranzspielraum für vertikale Verschiebungen:
Der Einfachheit halber nehmen wir an, dass die Bilder von guter Qualität sind und das Feld “Rechnungsnummer” und seine Bezeichnung immer erkannt werden.In der Praxis müssen Sie vor dem Aufrufen der Eigenschaften dieser Elemente deren
IsNull-Prüfung ausführen. Denn wenn die Elemente nicht erkannt werden, wird die weitere Suche relativ zu den Suchbereichen der entsprechenden Elemente durchgeführt.
Datumshypothesen abwerten, die weit von den Rechnungsfeldern entfernt liegen
Der Abschnitt Erweiterte Nach-Suchbeziehungen des Date-Elements enthält den folgenden Code:Weitere Informationen zur Verwendung dieser Funktionen finden Sie unter Nach Elementen mit Nearest und FuzzyQuality suchen.
Suchbedingungen für das Element DateAsString
Für das Element DateAsString werden dieselben Suchbedingungen angegeben, aber im Abschnitt Erweiterte Nach-Suchbeziehungen wird dem zuvor gezeigten Code noch eine weitere Zeile hinzugefügt:RestrictSearchArea (Date.Rect); festgelegt.
Damit weist FlexiLayout Studio an, nach dem Objekt des Elements DateAsString im Bereich des unscharfen Rechtecks des Elements Date zu suchen. Der Suchbereich des Elements Date kann als Array von Rechtecken dargestellt werden.
Wenn für das Element Date eine Nullhypothese erzeugt wird, wird das den Suchbereich umschließende Rechteck als Rechteck (Rect) des aktuellen Elements verwendet. Wie Sie in der Abbildung unten sehen können, umschließt es auch das durch das Element InvoiceNum beschriebene Feld „Rechnungsnummer“.
Unter bestimmten Bedingungen (zum Beispiel, wenn das Datumsfeld stark verrauscht ist) kann es vorkommen, dass das Element DateAsString statt des Datumsfelds das Feld mit der Rechnungsnummer erkennt, da die für dieses Element angegebenen Zeichen (einschließlich Ziffern) keinerlei Formateinschränkungen unterliegen.

Prüfen Sie die Feldanordnung mit dem Hilfselement ShamElement
Nachdem die Elemente beschrieben wurden, die für die Suche nach den Feldern “Rechnungsnummer” und “Rechnungsdatum” erforderlich sind, folgt als nächster Schritt die Suche nach den Feldern “Firmenname” und “Firmenadresse”. Das Projekt verwendet ein Paragraph-Element mit dem Namen ShamElement. Dieses Element dient als Hilfselement und wird ausschließlich verwendet, um die relative Position der Felder “Rechnungsnummer” und “Rechnungsdatum” zueinander zu prüfen. Der Abschnitt Advanced pre-search relations des Hilfselements enthält den folgenden Code:
Suche nach dem Firmennamen relativ zu den Rechnungsfeldern
Um die Unternehmensdaten zu erkennen, verwendet das Projekt ein Group-Element CompanyGroup. Es gruppiert das Element CompanyName vom Typ Zeichenkette (auf den Testbildern steht der Firmenname in einer einzigen Zeile) und das Element Adresse vom Typ Paragraph. Das letztgenannte Element wird verwendet, um den Block zu suchen, der die Firmenadresse enthält. Die Verwendung des Hilfselements vereinfacht den Code, der die Suchbedingungen des Elements im Abschnitt Advanced pre-search relations beschreibt. Wird das Hilfselement nicht erkannt (das heißt, wird dafür eine Nullhypothese erzeugt), bedeutet dies, dass sich das Datumsfeld rechts vom Rechnungsfeld befindet. In diesem Fall wird das Feld “Firmenname” unterhalb des Felds “Rechnungsnummer” gesucht. Wird das Hilfselement erkannt, wird das Feld “Firmenname” oberhalb des Felds “Rechnungsnummer” gesucht.In diesem Fall kann die Funktion
Nearest verwendet werden, da sie dabei hilft, das Feld mit dem Unternehmensnamen eindeutig und präzise zu erkennen (es gibt keine Objekte, die denselben Suchbedingungen entsprechen).Above: InvoiceGroup.InvoiceHeader; und Above: InvoiceGroup.InvoiceNum; werden nicht nur von der Zeile mit dem Firmennamen erfüllt, sondern auch von den Zeilen im Adressfeld.

