従来型の固定レイアウト文書によく見られる field を検索するために、FlexiLayout を作成する必要が生じることがあります。たとえば、文字を小さな枠内に記入する field を記述する必要がある場合です。典型的な例として、企業が各地域オフィスから文書を収集するケースがあります。文書は同じように見えることが想定されていても、地域オフィスごとにレイアウトにわずかな違いがある場合があり、その結果、単一の「ハード」な Document Definition では処理できないことがあります。このような場合は、少しずつ異なる複数の「ハード」な Document Definition を使うよりも、1 つの FlexiLayout を使用する方が適していることがあります。
文書上で検索対象となる data field が「枠付き文字」または「個別の枠付き文字」タイプである場合、このような field の境界をセパレーターに基づいて検索するのは非常に複雑になることがあり、特にそのような field の名前が利用できない場合や認識が不確かな場合には、要素の記述が煩雑になりがちです。さらに、block にはこれらの field だけでなく、枠全体も含まれていることが非常に重要です。セパレーターの線が細い場合、印刷がかすれていたり、スキャン時に消失したりすることがあります。そのような場合は、White Gap 要素を使用して境界を検索することをお勧めします。このような field の境界は、block の Properties ダイアログの Expression field で、特別な FlexiLayout language を使用して記述します。field の上境界は上側の white gap の下端、下境界は下側の white gap の上端、右境界は右側の white gap の左境界、左境界は左側の white gap の右境界として記述できます。
テスト画像とテスト済みの FlexiLayout を含む FlexiLayout Studio プロジェクトは、%public%\ABBYY\FlexiCapture\12.0\Samples\FLS\Tips and Tricks にあります。
例
ここでは、画像内の data field の位置を正確に記述するために必要な 4 つの gap (LeftGapName、RightGapName、TopGapName、BottomGapName) がすべて見つかっているものとします。
この場合、Expression field 内のコードは次のようになります。
Rect outputRect;
Let FieldLeft = LeftGapName.Rect.Right;
Let FieldRight = RightGapName.Rect.Left;
Let FieldTop = TopGapName.Rect.Bottom;
Let FieldBottom = BottomGapName.Rect.Top;
outputRect = Rect(FieldLeft, FieldTop, FieldRight, FieldBottom);
OutputRegion = outputRect;
「LeftGapName」、「RightGapName」、「TopGapName」、「BottomGapName」の代わりに、対応する White Gap 要素の名前を指定してください。必要に応じて、Inflate オプションを使用して field の幅と高さを広げることができます。
文書上で検索対象となる data field が複数行の field で、「枠付き文字」または「個別の枠付き文字」タイプの marking を持ち、各行が gap で区切られていない場合は、White Gap 要素を使用して上、下、右、左の境界を検索する必要があります。その後、各行の検索は Expression field で特別なアルゴリズムとして指定する必要があります。この例では、各行の高さは field 全体の高さを 2 で割ることで計算できます。
