
Tips and tricks
RestrictSearchArea を使用した検索領域の制限
FlexiLayout Studio で RestrictSearchArea を使用して、検索領域を矩形、矩形配列、または region として設定し、要素の検索条件の重複を避けます。
RestrictSearchArea 関数を使用すると、検索領域を矩形、矩形の配列、または region として指定できます。
Document のページごとに、目的の field がその名前に対して異なる位置にあることがよくあります。たとえば、あるページでは field が名前の右側にあり、別のページでは名前の下にある場合があります。このようなケースでは、検索領域を矩形の配列として指定することをお勧めします。このような場合に RestrictSearchArea 関数を使用する方法については、Using Nearest and FuzzyQuality to look for elements を参照してください。
また、複数の element に対して同一の検索条件を重複して設定する代わりに、RestrictSearchArea 関数を使用したほうがよい場合もあります。
この関数は、何らかの理由 (たとえば、画質が低い、または layout 上の特性があるなど) で、1 種類の element だけでは不十分な場合に、日付 field やその他の field の検索領域を記述するために使用します。
RestrictSearchArea 関数を使って日付 field を検索する方法を見てみましょう。通常、日付 field の検索には、少なくとも Date と Character String という 2 種類の element を使用することが推奨されます。ただし、画質が非常に低い場合は、これら 2 つの element だけでは不十分なことがあります。日付 field の検索をどのように構成するかについて詳しくは、Detecting dates in the case of low quality pre-recognition を参照してください。
この関数の動作を、サンプル プロジェクト SearchOfDate.fsp (フォルダー %public%\ABBYY\FlexiCapture\12.0\Samples\FLS\Tips and Tricks\RestrictSearchArea) を実行して見てみましょう。このプロジェクトは、実際には Date\FCS プロジェクト フォルダー内にある同名のプロジェクトのコピーです。このプロジェクト内のすべての element (DateField、DateAsString、DateAsObjectCollection) の検索条件は同一で、下図のようになっていました。

しかし、このプロジェクトでは、element DateAsString と DateAsObjectCollection の Relations tab で検索条件を重複して設定する代わりに、Advanced tab の Advanced pre-search relations field に次のコードを記述して RestrictSearchArea 関数を使用します。
if (DateField.IsNull == FALSE) then Dontfind();
else RestrictSearchArea (DateField.Rect);
このコードは、プログラムが Date element によって日付 field を検出できなかった場合にのみ、文字列または object collection としての日付 field の検索を試みることを意味します。また、両方の element は、DateField element が検出されなかったその領域内で検索されます。これは、DateField.Rect メソッドが DateField element の仮説を囲む矩形を返すためです。仮説が見つかっていないため、その外接矩形は検索領域と一致します。したがって、DateAsString および DateAsObjectCollection element には、未検出の DateField element の検索領域を囲む矩形と一致する検索領域を指定することになります。

