Zum Hauptinhalt springen
Bei einigen Dokumenten befindet sich das Feld Rechnungsnummer rechts neben dem Feldnamen, bei anderen dagegen unter dem Namen (in Dokument 1 und 2 stehen die Felddaten direkt unter dem Namen). So erstellen Sie ein InvoiceNumber-Element:
  1. Erstellen Sie im Element InvoiceHeader ein Element vom Typ Zeichenkette und nennen Sie es InvoiceNumber. Hinweis. Der Name des Elements muss nicht mit dem Namen des Blocks übereinstimmen, der dem Feld InvoiceNumber entspricht. Es ist jedoch praktisch, identische Namen zu verwenden, wenn Sie mit einem FlexiLayout arbeiten.
  2. Klicken Sie auf die Registerkarte Zeichenkette.
  3. Geben Sie das Alphabet an: -./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
  4. Setzen Sie Percentage nicht alphabetischer Zeichen auf 30 %.
  5. Geben Sie im Feld Zeichenanzahl das Fuzzy-Intervall {-1, 3, 20, INF} für die Länge der Zeichenkette an. Dabei wird angenommen, dass mögliche Werte im Bereich von 3 bis 20 Zeichen liegen. Jede Hypothese außerhalb dieses Intervalls wird negativ bewertet.
  6. Bei einigen Bildern enthält der Suchbereich für das Feld Rechnungsnummer das bereits erkannte Element kwInvoiceDate. Schließen Sie dieses Element aus dem Suchbereich aus, damit das Programm diesen Text nicht in seine Hypothesen für das Feld Rechnungsnummer einbezieht:
    • Klicken Sie auf der Registerkarte Suchbedingungen auf die Schaltfläche Hinzufügen… neben dem Feld Regionen von Elementen ausschließen.
    • Wählen Sie kwInvoiceDate aus der Elementliste aus.
    • Klicken Sie auf OK. Die Zeichenkette SearchElements.InvoiceHeader.kwInvoiceDate wird im Feld Regionen von Elementen ausschließen angezeigt.
  1. Klicken Sie auf die Registerkarte Erweitert.
  2. Geben Sie unter Erweiterte Vorab-Suchbeziehungen zusätzliche Bedingungen an: Wenn der Name kwInvoiceNumber nicht gefunden wird, suchen Sie nicht nach dem Feld InvoiceNumber; andernfalls geben Sie den Suchbereich als Array von Rechtecken an: ein Rechteck rechts vom Namen und ein weiteres Rechteck mit einem kleinen Versatz unter dem Namen. In der FlexiLayout-Sprache kann diese Bedingung wie folgt geschrieben werden: if kwInvoiceNumber.IsNull then Dontfind(); else { WholeWordMOde: true; MaxGapInLine: 30dt; RectArray DataRegion; Let r1= Rect (kwInvoiceNumber.Rect.Right, kwInvoiceNumber.Rect.Top -20dt, kwInvoiceNumber.Rect.Right + 650dt, kwInvoiceNumber.Rect.Bottom + 50dt); // Begrenzt den Suchbereich mit einem Rechteck rechts vom Namen des Felds InvoiceNumber. Let r2 = Rect (kwInvoiceNumber.Rect.Left - 100dt, kwInvoiceNumber.Rect.Bottom, kwInvoiceNumber.Rect.Right + 100dt, kwInvoiceNumber.Rect.Bottom + 100dt); // Begrenzt den Suchbereich mit einem Rechteck unter dem Namen des Felds InvoiceNumber. DataRegion = RectArray (r1); DataRegion.Add (r2); RestrictSearchArea (DataRegion); }
  3. Der Suchbereich für das Feld ist auf zwei Rechtecke begrenzt, eines rechts vom Feldnamen und eines darunter. Wenn sich die Felddaten rechts vom Feldnamen befinden, steht unter dem Feld häufig noch weiterer Text (in den Testbildern sind das meist der Name und die Daten des Felds Date). Da dieser zusätzliche Text in den Suchbereich für das Feld Rechnungsnummer einbezogen wird, erzeugt das Programm dafür eine Hypothese. Um die Quality dieser Hypothese zu beeinflussen, geben Sie im Feld Erweiterte Nach-Suchbeziehungen zusätzliche Prüfungen an: Je weiter unten der Text unter dem Feldnamen steht, desto höher ist die Abwertung. In der FlexiLayout-Sprache kann diese Bedingung wie folgt geschrieben werden: if not IsNull then { FuzzyQuality: Top - kwInvoiceNumber.Rect.Top, {-30000,0,0,10000}*dt; } // Je größer die Distanz zwischen dem Namen und der oberen Begrenzung des Felds ist, desto höher ist die Abwertung für die entsprechende Hypothese. In diesem speziellen Fall hat die Hypothese für das Element, dessen obere Begrenzung mit der oberen Begrenzung des Namens zusammenfällt, die höchste Quality.
  4. Schließen Sie das Element InvoiceFooter vorübergehend aus und gleichen Sie das FlexiLayout ab.
  5. Geben Sie die Position des Blocks InvoiceNumber als rechteckige Region des Elements InvoiceNumber an, die vertikal und horizontal um 5 Dots vergrößert ist. Wählen Sie dazu Ausdruck aus und geben Sie den folgenden Ausdruck ein: Rect outputRect; outputRect = InvoiceHeader.InvoiceNumber.Rect; IsNull = InvoiceHeader.InvoiceNumber.IsNull; // Behandelt die Blockregion als Detected, wenn das Element InvoiceNumber erkannt wurde. OutputRegion = outputRect; OutputRegion.Inflate (5dt, 5dt);