FlexiLayout のブロック型
テキストブロックの領域を拡張すると、認識精度が向上する場合があります。領域を拡張するには、Blocks 要素をダブルクリックして Properties ダイアログを開き、Blocks result region inflate プロパティで垂直方向と水平方向の値を指定します。
少なくとも 1 つの代替レイアウトで画像領域が指定されていないブロックは、アイコンの右上隅に空の四角形が表示されます:
ブロックからのデータは、ABBYY FlexiCapture などのデータ抽出アプリケーションで抽出されます。
ブロック のプロパティ
Instance sort order プロパティには次の値があります。
In order of finding では、インスタンスに追加条件を指定すると、仮説はユーザー定義の順序で生成されます。プログラムで使用される標準の順序とは異なる順序が必要な場合は、追加条件を使用して指定できます。
以下のプロパティは、画像上でデータを抽出する領域を指定します。
For Layout
ソース要素
AllInstances) を使用することもできます。詳細については、繰り返しグループのインスタンスを参照要素、除外要素、またはソース要素として使用するを参照してください。
Expression
ブロックの領域は連続しています。つまり、離れた位置にある矩形から領域を作成すると、それらの間の空間は、領域を連続させるために細い追加の矩形で埋められます。
グループブロックと繰り返しグループブロックのパラメーター
OutputInstances 変数は常に作成されます。繰り返しグループブロック内のブロックで Has repeating instances オプションが有効になっている場合、そのブロックは親ブロックの各インスタンス内で繰り返すことができます。
繰り返しグループのインスタンスを使用してブロック領域を指定する
LastFound) を使用する場合、ブロック領域は他の要素と同様に定義されます。
一方、検出されたすべてのインスタンス (AllInstances) を使用することもできます。複数のインスタンスを使用するには、Has repeating instances オプションを選択します。
また、事前定義された OutputInstances 変数を使って、ブロック用のコードを記述することもできます。例:
- テーブル以外のブロックでは、指定されたインスタンスは対応する field のインスタンスとして扱われます。
- テーブルブロックでは、指定されたインスタンスは field の 1 つのインスタンスとして扱われます。つまり、ABBYY FlexiCapture はそのようなブロックを、不連続な領域を持つ Table 型の field として処理します。
ブロックの繰り返しグループに対する要素参照を作成する際のルール
AllInstances でなければなりません。
AllInstances を持つ要素の下にネストされた要素は、他の ID を持つことができません。そのため、この条件は、最下位の繰り返し要素が AllInstances を持つことも意味します。
ブロックの繰り返しグループの子ブロックは、親ブロックが参照する要素グループの繰り返しグループの子要素を参照します。この参照では、インスタンスに対して同じ ID を指定する必要があります。
たとえば、繰り返しグループのブロックが SearchElements..RepGr1.Instance(1).RepGr2.AllInstances という参照を持つ場合、その子ブロックが要素 RepGr1..RepGr2.Element を参照できるのは、次の場合のみです。
HasRepeatingInstances 属性がない場合、参照できるのは、基本グループ内で内部に繰り返しを持たないサブ要素だけです。逆も同様です。
HasRepeatingInstances 属性がある場合は、基本グループ内で内部に繰り返しを持つ要素を参照できます (この場合、参照できるのはすべてのインスタンスをまとめたものだけです) 。
With a HasRepeatingInstances attribute
Without a HasRepeatingInstances attribute
ソース要素 を介して参照が作成されている場合、チェックは FlexiLayout の構築時に実行されます。Advanced code を使用して参照が作成されている場合は、FlexiLayout のマッチング時にエラーが検出されます。
FlexiLayout language でブロック領域を記述する
Expression field で使用できる事前定義変数の詳細については、事前定義変数を参照してください。
IsNull 変数を使用する
IsNull 変数を使用して、ブロックの領域を記述することもできます。この変数は、FlexiLayout とのマッチング時にブロックの領域が見つかったかどうかを示します。値が false の場合は、その領域が見つかっています。値が true の場合は、見つかっていません。
IsNull 変数は値 false で初期化されるため、ブロックの領域は見つかっているものと見なされます。ただし、場合によっては、結論を出す前に特定の条件を確認する必要があります。
ソース要素の領域の幅が 50 ドットを超える場合に、ブロックの領域を見つかったものと見なすようプログラムに指示するには、Region Expression フィールドに次のコードを入力します。
Element1 が見つかった場合にのみブロックの領域を見つかったものと見なすようプログラムに指示するには、Region Expression フィールドに次のコードを入力します。
Element1 と Element2 を使用してブロックを検索する必要があるとします。少なくとも 1 つの要素が見つかっていない場合、そのブロックは見つからなかったものと見なされます。
このコードが正しく機能するのは、
Element1 の検索領域が Element2 の検索領域より上かつ左にある場合だけです。前述の例では、簡潔にするため、この条件の確認は省略しています。実際のコードでは、この確認が必要であり、FieldLeft、FieldRight、FieldTop、FieldBottom 変数の値も調整しなければなりません。そうしないと、Rect 関数を呼び出したときにエラーが返されます。