Passer au contenu principal
Sur certains documents, le champ Numéro de facture se trouve à droite du nom du champ, tandis que sur d’autres, il se trouve en dessous (dans les documents 1 et 2, les données du champ sont placées directement sous le nom). Pour créer un élément InvoiceNumber :
  1. Dans l’élément InvoiceHeader, créez un élément de type Character String et nommez-le InvoiceNumber. Remarque. Le nom de l’élément ne doit pas nécessairement être identique à celui du bloc correspondant au champ InvoiceNumber. Cependant, il est pratique d’utiliser des noms identiques lorsque vous travaillez avec un FlexiLayout.
  2. Cliquez sur l’onglet Character String.
  3. Spécifiez l’alphabet : -./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
  4. Définissez Percentage of non-alphabet characters sur 30 %.
  5. Dans le champ Character count, spécifiez l’intervalle flou {-1, 3, 20, INF} pour la longueur de la chaîne de caractères, en supposant que les valeurs possibles se situent dans la plage de 3 à 20 caractères. Toute hypothèse en dehors de cet intervalle sera pénalisée.
  6. Sur certaines images, la zone de recherche du champ Numéro de facture contient l’élément kwInvoiceDate déjà détecté. Excluez cet élément de la zone de recherche afin que le programme n’inclue pas ce texte dans ses hypothèses pour le champ Numéro de facture :
    • Dans l’onglet Search Constraints, cliquez sur le bouton Add… situé à côté du champ Exclude regions of elements.
    • Sélectionnez kwInvoiceDate dans la liste des éléments.
    • Cliquez sur OK. La chaîne SearchElements.InvoiceHeader.kwInvoiceDate apparaît dans le champ Exclude regions of elements.
  1. Cliquez sur l’onglet Advanced.
  2. Dans les relations avancées de pré-recherche, spécifiez des conditions supplémentaires : si le nom kwInvoiceNumber est introuvable, ne recherchez pas le champ InvoiceNumber ; sinon, définissez la zone de recherche sous forme de tableau de rectangles : un rectangle à droite du nom et un autre sous le nom, avec un léger décalage. Dans le langage FlexiLayout, cette condition peut s’écrire comme suit : 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); // Limite la zone de recherche à un rectangle situé à droite du nom du champ InvoiceNumber. Let r2 = Rect (kwInvoiceNumber.Rect.Left - 100dt, kwInvoiceNumber.Rect.Bottom, kwInvoiceNumber.Rect.Right + 100dt, kwInvoiceNumber.Rect.Bottom + 100dt); // Limite la zone de recherche à un rectangle situé sous le nom du champ InvoiceNumber. DataRegion = RectArray (r1); DataRegion.Add (r2); RestrictSearchArea (DataRegion); }
  3. La zone de recherche du champ est limitée à deux rectangles, l’un à droite du nom du champ et l’autre en dessous. Si les données du champ se trouvent à droite du nom du champ, un autre texte apparaît souvent sous le champ (sur les images de test, il s’agit le plus souvent du nom et des données du champ Date). Comme ce texte parasite sera inclus dans la zone de recherche du champ Numéro de facture, le programme générera une hypothèse pour ce texte. Pour influer sur la qualité de cette hypothèse, spécifiez des vérifications supplémentaires dans le champ Relations avancées après recherche : plus le texte situé sous le nom du champ est bas, plus la pénalité est importante. Dans le langage FlexiLayout, cette condition peut s’écrire comme suit : if not IsNull then { FuzzyQuality: Top - kwInvoiceNumber.Rect.Top, {-30000,0,0,10000}*dt; } // Plus la distance entre le nom et la limite supérieure du champ est grande, plus la pénalité appliquée à l’hypothèse correspondante est importante. Dans ce cas précis, l’hypothèse de l’élément dont la limite supérieure coïncide avec celle du nom aura la qualité la plus élevée.
  4. Excluez temporairement l’élément InvoiceFooter et associez le FlexiLayout.
  5. Spécifiez l’emplacement du bloc InvoiceNumber comme une région rectangulaire de l’élément InvoiceNumber, agrandie de 5 points verticalement et horizontalement. Pour ce faire, sélectionnez Expression et saisissez l’expression suivante : Rect outputRect; outputRect = InvoiceHeader.InvoiceNumber.Rect; IsNull = InvoiceHeader.InvoiceNumber.IsNull; // Considère la région du bloc comme détectée si l’élément InvoiceNumber a été détecté. OutputRegion = outputRect; OutputRegion.Inflate (5dt, 5dt);