Tipos de bloque de FlexiLayout
ABBYY FlexiLayout Studio admite los siguientes tipos de bloque:
Ampliar las regiones de los bloques de texto puede mejorar la calidad del reconocimiento. Para ampliar una región, haga doble clic en el elemento Blocks para abrir su cuadro de diálogo Properties y especifique los valores verticales y horizontales de la propiedad Blocks result region inflate.
Los bloques para los que no se especifica ningún área de imagen en al menos una alternativa de layout tienen un cuadrado vacío en la esquina superior derecha del icono:
Los datos de los bloques se extraen en una aplicación de captura de datos como ABBYY FlexiCapture.
Propiedades del bloque
Un bloque tiene las siguientes propiedades:
La propiedad Orden de las instancias tiene los siguientes valores:
Con En orden de detección, si especifica condiciones adicionales para las instancias, las hipótesis se generan en el orden definido por el usuario. Si necesita un orden distinto del orden estándar que utiliza el programa, puede especificarlo mediante condiciones adicionales.
Las siguientes propiedades especifican el área de la imagen de la que deben extraerse los datos.
For Layout
Selecciona la alternativa de layout en la que se especifica el área de búsqueda.Source element
Especifica un área de la imagen idéntica a la Region del elemento utilizado para encontrar el bloque en la imagen. Cuando el FlexiLayout se aplica a la imagen, el programa busca el objeto (o los objetos) descrito por el elemento. Los datos se extraen de estos objetos. Para un grupo repetido, puede seleccionar una de las instancias o usar todas las instancias (AllInstances). Para obtener más información, consulte Usar instancias de un grupo repetido como elementos de referencia, excluidos o de origen.
Expression
Establece un área en la imagen que no coincide con ninguna de las regiones de los elementos. Por ejemplo, puede combinar en un solo bloque las regiones de algunos elementos y el espacio entre ellas, ampliar la región de un elemento en un valor determinado o especificar las coordenadas del bloque sin depender de ningún elemento. En este caso, la región del bloque puede describirse en el FlexiLayout language.La región de un bloque es continua. Esto significa que, si crea una región a partir de rectángulos separados entre sí, los espacios entre ellos se rellenan con rectángulos adicionales estrechos para que la región sea continua.
Parámetros de los bloques de grupo y de grupo repetido
Un grupo de marcas de verificación y un grupo común de bloques no tienen más parámetros que Name y Comment. Los parámetros de un grupo repetido de bloques son los mismos que los de los bloques no agrupados. La opción Has repeating instances siempre está habilitada para ellos. Los bloques secundarios pueden tener o no la opción Has repeating instances, pero siempre se crea para ellos una variableOutputInstances. Si un bloque dentro de un grupo repetido de bloques tiene la opción Has repeating instances, esto significa que puede repetirse dentro de cada instancia del bloque padre.
Especifique una región de bloque mediante instancias de un grupo repetido
Si un bloque se define mediante varias instancias, la región de bloque consta de varias regiones independientes. Si utiliza una instancia concreta de un grupo repetido (por ejemplo,LastFound), la región de bloque se define igual que para cualquier otro elemento.
Sin embargo, puede usar todas las instancias detectadas (AllInstances). Para usar varias instancias, seleccione la opción Has repeating instances.
También puede escribir código para el bloque usando la variable predefinida OutputInstances. Por ejemplo:
- Para los bloques que no son de tabla, las instancias especificadas son las del campo correspondiente.
- Para un bloque de tabla, las instancias especificadas se tratan como una sola instancia del campo. Es decir, ABBYY FlexiCapture procesa ese bloque como un campo de tipo Table con una región discontinua.
Reglas para crear referencias a elementos para grupos repetidos de bloques
Un grupo repetido de bloques hace referencia a un elemento repetido. Para crear instancias de un grupo repetido de bloques, se necesitan varias instancias de elementos. Por lo tanto, uno de los ID debe serAllInstances.
Dado que los elementos anidados dentro del elemento con AllInstances no pueden tener otros ID, esta condición también significa que el elemento repetido situado en el nivel más bajo tiene AllInstances.
Los bloques secundarios de un grupo repetido de bloques hacen referencia a los elementos secundarios del grupo de elementos al que hace referencia el bloque padre. La referencia debe tener el mismo ID para las instancias.
Por ejemplo, si un bloque de grupo repetido tiene la referencia SearchElements..RepGr1.Instance(1).RepGr2.AllInstances, sus bloques secundarios solo pueden hacer referencia al elemento RepGr1..RepGr2.Element de la siguiente manera:
HasRepeatingInstances, solo puede hacer referencia a los subelementos del grupo básico que no contengan repeticiones, y viceversa.
Si hay un atributo HasRepeatingInstances, puede hacer referencia a los elementos que contengan repeticiones dentro del grupo básico (y solo puede hacer referencia a todas las instancias a la vez).
With a HasRepeatingInstances attribute
Without a HasRepeatingInstances attribute
Si las referencias se crean mediante Source element, la comprobación se realiza cuando se compila el FlexiLayout. Si las referencias se crean mediante código Advanced, se detecta un error durante el emparejamiento del FlexiLayout.
Describir la región de un bloque con FlexiLayout language
Para especificar la región de un bloque, use el campo Expression. La variable predefinida que se utiliza depende del tipo de bloque y de si tiene seleccionada la opción Has repeating instances:
Para obtener más información sobre las variables predefinidas que se pueden usar en el campo Expression, consulte Variables predefinidas.
Usar la variable IsNull
También puede usar una variable predefinidaIsNull para describir la región de un bloque. Esta variable indica si la región del bloque se ha encontrado durante el emparejamiento del FlexiLayout. El valor false significa que la región se ha encontrado. El valor true significa que no se ha encontrado.
La variable IsNull se inicializa con el valor false, por lo que se considera que la región del bloque se ha encontrado. Sin embargo, a veces puede ser necesario comprobar ciertas condiciones antes de llegar a una conclusión.
Para indicar al programa que considere encontrada la región del bloque si el ancho de la región del Source element supera los 50 dots, escriba el siguiente código en el campo Region Expression:
Element1, escriba el siguiente código en el campo Region Expression:
Element1 y Element2 para buscar un bloque. Si al menos uno de los elementos no se ha encontrado, se considera que el bloque no se ha encontrado:
Este código funciona correctamente solo si el área de búsqueda de
Element1 está encima y a la izquierda del área de búsqueda de Element2.En el ejemplo anterior, esta condición no se comprueba, por simplicidad. En el código real, esta comprobación es necesaria y los valores de las variables FieldLeft, FieldRight, FieldTop y FieldBottom deben ajustarse. De lo contrario, la llamada a la función Rect devuelve un error.