> ## Documentation Index
> Fetch the complete documentation index at: https://docs.abbyy.com/llms.txt
> Use this file to discover all available pages before exploring further.

# サンプル 4. Step 9.2: Total Amount field、TotalAmount 要素

> FlexiLayout Studio のサンプル 4 で TotalAmount Character String 要素を設定し、高度なpre-search relationsとpost-search relationsを使って検索領域を制限します。

TotalAmount field を、その名前の右側かつ下側で検索します。

TotalAmount 要素を作成するには:"

1. **SumGroup** 要素で、Character String タイプの要素を作成し、**TotalAmount** という名前を付けます。
2. Character String タブをクリックします。
3. アルファベットを指定します。
   ',-.0123456789OSZosz
4. アルファベット以外の文字の Percentage を 30% に設定します。
5. Character count field で、文字列の長さを評価する次のファジー区間 `{-1, 1, 20, INF}` を指定します。想定されるすべての値が 1 ～ 20 文字の範囲に収まるものとします。この範囲外の仮説にはペナルティが適用されます。
6. 追加の制約は設定せず、デフォルト設定のままにします。
7. Search Constraints タブをクリックし、**kwTotal** 要素の仮説の Region を検索領域から除外します。
8. Advanced タブをクリックします。
9. **Advanced pre-search relations** で追加の検索条件を指定します。**kwTotal** の名前が検出された場合は、検索領域を矩形の配列として指定します。1 つは field 名の右側、もう 1 つは field 名の下側にオフセット付きで配置します。それ以外の場合は、画像オブジェクトを検索しません。[FlexiLayout language](/ja/flexi-capture/fls/code/general-code) では、この条件は次のように記述できます。

   ```text theme={null}
   If not kwTotal.IsNull Then
   // field 名 kwTotal が検出された場合
   {
   WholeWordMOde: true;
   MaxGapInLine: 30dt;
   RectArray DataRegion;
   Let r1= Rect (kwTotal.Rect.Right, kwTotal.Rect.Top -20dt, kwTotal.Rect.Right + 1800dt, kwTotal.Rect.Bottom + 50dt);
   // 検索領域を field 名の右側の矩形に制限します。
   Let r2 = Rect (kwTotal.Rect.Left - 100dt, kwTotal.Rect.Bottom, kwTotal.Rect.Right + 100dt, kwTotal.Rect.Bottom + 200dt);
   // 検索領域を field 名の下側の矩形に制限します。
   DataRegion = RectArray (r1);
   DataRegion.Add (r2);
   RestrictSearchArea (DataRegion);
   }
   else Dontfind();
   // それ以外の場合は、オブジェクトを検索しません。
   ```
10. field 値の検索領域は 2 つの矩形に制限されます。1 つは field 名の右側、もう 1 つは field 名の下側です。field 値が field 名の右側にある場合、多くの画像では field 名の下にも何らかのテキストがあります。多くの画像では、この余分なテキストが **TotalAmount** field の検索領域に含まれるため、プログラムはこのテキストに対する仮説を作成します。この仮説の Quality に影響を与えるため (つまり Quality を下げるため) 、**Advanced post-search relations** で追加チェックを指定します。field 名より下にある field 値ほど、ペナルティが大きくなります。[FlexiLayout language](/ja/flexi-capture/fls/code/general-code) では、このチェックは次のように記述できます。

    ```text theme={null}
    If not IsNull then
    {FuzzyQuality: 400dt - width, {-50000,0,0, 50000}*dt;
    // 幅 400 ドットの Region を持つ要素の仮説は最大の Quality になります
    if width < 50dt then Quality: 0;
    // 50 ドット未満の要素は考慮されません
    if Top > kwTotal.Rect.Top then
    { FuzzyQuality: Top - kwTotal.Rect.Top, {0,0,0, 20000}*dt;
    }
    }
    // このチェックは、差が大きいほどペナルティも大きいことを意味します。
    ```

    <Info>
      ページ上のオブジェクトの位置と、それらの間の距離を表すために、2D 座標系を使用します。(0, 0) の点は画像の左上隅にあります。横軸は左から右、縦軸は上から下の方向です。
    </Info>
11. 要素が存在するすべての画像でプログラムがその要素を確実に検出できることを確認するため、画像に対して FlexiLayout をマッチングします。
12. **TotalAmount** block の位置を、**TotalAmount** 要素の矩形領域を縦横に 5 ドット拡張した矩形領域として指定します。これを行うには、Expression を選択し、次の式を指定します。

    ```text theme={null}
    Rect outputRect;
    outputRect = SumGroup.TotalAmount.Rect;
    IsNull = SumGroup.TotalAmount.IsNull;
    OutputRegion = outputRect;
    OutputRegion.Inflate (5dt, 5dt);
    ```
