> ## 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.

# ブロック

> FlexiLayout ブロックは、データ抽出のために文書の field を対応付けます。Text、Barcode、Table、およびグループのブロック型、そのプロパティ、Region expression を確認してください。

FlexiLayout のブロックは、データを抽出する必要があるドキュメント上の field に対応します。ブロックでは、その field に含まれる可能性があるデータの種類と、その field が見つかる可能性が高い画像Regionの座標を指定します。

ブロックのブランチは、FlexiLayout ツリー内で <img src="https://mintcdn.com/abbyy/lqYknuOmCa79141v/images/flexi-capture/fls/block_tree.gif?fit=max&auto=format&n=lqYknuOmCa79141v&q=85&s=deeed524eb72bc9b5af0c1fff61eabb1" alt="ツリーのブロックアイコン" style={{display:"inline-block",verticalAlign:"middle",margin:0}} width="15" height="15" data-path="images/flexi-capture/fls/block_tree.gif" /> で示されます。

<div id="flexilayout-block-types">
  ## FlexiLayout のブロック型
</div>

ABBYY FlexiLayout Studio では、次のブロック型をサポートしています。

| ブロック型              | アイコン                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            | 説明                                                                                          |
| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- |
| **Text**           | <img src="https://mintcdn.com/abbyy/lqYknuOmCa79141v/images/flexi-capture/fls/block_text.gif?fit=max&auto=format&n=lqYknuOmCa79141v&q=85&s=2f5f93810c1a248df472ba326e53399e" alt="Text ブロック アイコン" style={{display:"inline-block",verticalAlign:"middle",margin:0}} width="15" height="15" data-path="images/flexi-capture/fls/block_text.gif" />                                                                                                     | テキストデータの抽出に使用します。                                                                           |
| **Barcode**        | <img src="https://mintcdn.com/abbyy/lqYknuOmCa79141v/images/flexi-capture/fls/block_barcode.gif?fit=max&auto=format&n=lqYknuOmCa79141v&q=85&s=ebe7e02bd4b709748972b2296c85373b" alt="Barcode ブロック アイコン" style={{display:"inline-block",verticalAlign:"middle",margin:0}} width="15" height="15" data-path="images/flexi-capture/fls/block_barcode.gif" />                                                                          | バーコードの読み取りに使用します。                                                                           |
| **Checkmark**      | <img src="https://mintcdn.com/abbyy/lqYknuOmCa79141v/images/flexi-capture/fls/block_checkmark.gif?fit=max&auto=format&n=lqYknuOmCa79141v&q=85&s=31c276522c85377d8fab2bd8bf20a188" alt="Checkmark ブロック アイコン" style={{display:"inline-block",verticalAlign:"middle",margin:0}} width="15" height="15" data-path="images/flexi-capture/fls/block_checkmark.gif" />                                                        | チェックマークの認識に使用します。                                                                           |
| **Picture**        | <img src="https://mintcdn.com/abbyy/lqYknuOmCa79141v/images/flexi-capture/fls/block_picture.gif?fit=max&auto=format&n=lqYknuOmCa79141v&q=85&s=5ef20c6bac449b68023e5bc9430320ee" alt="Picture ブロック アイコン" style={{display:"inline-block",verticalAlign:"middle",margin:0}} width="15" height="15" data-path="images/flexi-capture/fls/block_picture.gif" />                                                                          | 事前認識でテキストとして識別されなかったオブジェクトの処理に使用します。                                                        |
| **Table**          | <img src="https://mintcdn.com/abbyy/lqYknuOmCa79141v/images/flexi-capture/fls/Table_Block.gif?fit=max&auto=format&n=lqYknuOmCa79141v&q=85&s=b587cb447531d0883066fce4033ae88e" alt="Table ブロック アイコン" style={{display:"inline-block",verticalAlign:"middle",margin:0}} width="15" height="15" data-path="images/flexi-capture/fls/Table_Block.gif" />                                                                                            | テーブルからデータを抽出するために使用します。                                                                     |
| **Group**          | <img src="https://mintcdn.com/abbyy/lqYknuOmCa79141v/images/flexi-capture/fls/block_group.gif?fit=max&auto=format&n=lqYknuOmCa79141v&q=85&s=e765a304f828526d23c03274b2dc059c" alt="Group ブロック アイコン" style={{display:"inline-block",verticalAlign:"middle",margin:0}} width="15" height="15" data-path="images/flexi-capture/fls/block_group.gif" />                                                                                            | ブロックを論理的にグループ化するために使用します。                                                                   |
| **チェックマークグループ**    | <img src="https://mintcdn.com/abbyy/lqYknuOmCa79141v/images/flexi-capture/fls/block_checkmark_group.gif?fit=max&auto=format&n=lqYknuOmCa79141v&q=85&s=a1edbbbc4034740745e9706929c4b9d9" alt="チェックマークグループ ブロック アイコン" style={{display:"inline-block",verticalAlign:"middle",margin:0}} width="15" height="15" data-path="images/flexi-capture/fls/block_checkmark_group.gif" />      | チェックマークグループの作成に使用します。この種類のグループには、Checkmark ブロックのみ追加できます。ここでは、他の型のブロックを作成したり移動したりすることはできません。 |
| **繰り返しグループ**       | <img src="https://mintcdn.com/abbyy/lqYknuOmCa79141v/images/flexi-capture/fls/block_repeatable_group.gif?fit=max&auto=format&n=lqYknuOmCa79141v&q=85&s=3dd356ce8d79245d7f86431f6053598a" alt="繰り返しグループ ブロック アイコン" style={{display:"inline-block",verticalAlign:"middle",margin:0}} width="15" height="15" data-path="images/flexi-capture/fls/block_repeatable_group.gif" /> | ブロックの繰り返しグループを作成するために使用します。                                                                 |
| **Non-Recognized** | <img src="https://mintcdn.com/abbyy/fmgRWFNHKYN2MLSg/images/flexi-capture/fls/Block_Unrecognizable.gif?fit=max&auto=format&n=fmgRWFNHKYN2MLSg&q=85&s=059acd0b3370c31b337a74ca89a51a70" alt="認識不可ブロック アイコン" style={{display:"inline-block",verticalAlign:"middle",margin:0}} width="15" height="15" data-path="images/flexi-capture/fls/Block_Unrecognizable.gif" />                      | 認識対象から領域を除外するために使用します。                                                                      |

テキストブロックの領域を拡張すると、認識精度が向上する場合があります。領域を拡張するには、**Blocks** 要素をダブルクリックして **Properties** ダイアログを開き、**Blocks result region inflate** プロパティで垂直方向と水平方向の値を指定します。

少なくとも 1 つの代替レイアウトで画像領域が指定されていないブロックは、アイコンの右上隅に空の四角形が表示されます: <img src="https://mintcdn.com/abbyy/lqYknuOmCa79141v/images/flexi-capture/fls/block_undef.gif?fit=max&auto=format&n=lqYknuOmCa79141v&q=85&s=f7294febb9ed17bdeb883bf35bc71976" alt="未定義ブロック アイコン" style={{display:"inline-block",verticalAlign:"middle",margin:0}} width="16" height="15" data-path="images/flexi-capture/fls/block_undef.gif" />。

1 つの FlexiLayout のみが選択されている場合 (要素のショートカットメニューの **Select Layout** アイテム、**FlexiLayout** セクションの同じアイテム、または FlexiLayout のショートカットメニューの **Select Alternative Layout** アイテムから選択) 、プログラムはこの FlexiLayout でのみ画像領域を確認します。

<Note>
  ブロックからのデータは、ABBYY FlexiCapture などのデータ抽出アプリケーションで抽出されます。
</Note>

<div id="block-properties">
  ## ブロック のプロパティ
</div>

ブロック には次のプロパティがあります。

| Property                    | Description                                                                                                                                   |
| --------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
| **Name**                    | ブロック の名前です。使用できるのは、文字 (ローマ字、ダイアクリティカルマーク付きローマ字、キリル文字) 、数字、アンダースコアです。先頭は文字またはアンダースコアである必要があり、空白や特殊記号は使用できません。                                  |
| **Type**                    | ブロック の型です。作成時に選択します。ブロック で囲まれた領域内にあるオブジェクトの型に対応している必要があります。                                                                                   |
| **Comment**                 | ユーザーが指定する任意のコメントです。                                                                                                                           |
| **Has repeating instances** | ブロック が複数のインスタンスで構成されていることを示します。たとえば、[繰り返しグループ](/ja/flexi-capture/fls/template/repeatable-group) 要素のすべてのインスタンスをブロック領域として使用する場合は、このプロパティを選択します。 |
| **Instance sort order**     | グループのインスタンスを 1 つの ブロック に結合する順序を設定します。**Has repeating instances** を選択した場合にのみ使用できます。                                                            |

**Instance sort order** プロパティには次の値があります。

| Sort order              | Behavior                                             |
| ----------------------- | ---------------------------------------------------- |
| **Top to bottom**       | 画像上の位置に従って、上から下の順にインスタンスを 1 つの ブロック に結合します。          |
| **Left to right**       | 画像上の位置に従って、左から右の順にインスタンスを 1 つの ブロック に結合します。          |
| **Right to left**       | 画像上の位置に従って、右から左の順にインスタンスを 1 つの ブロック に結合します。          |
| **In order of finding** | 仮説が生成される順にインスタンスを 1 つの ブロック に結合します。仮説は品質の高い順に生成されます。 |

**In order of finding** では、インスタンスに追加条件を指定すると、仮説はユーザー定義の順序で生成されます。プログラムで使用される標準の順序とは異なる順序が必要な場合は、追加条件を使用して指定できます。

以下のプロパティは、画像上でデータを抽出する領域を指定します。

<div id="for-layout">
  ### For Layout
</div>

検索領域を指定する代替レイアウトを選択します。

<div id="source-element">
  ### ソース要素
</div>

画像上でブロックを見つけるために使用される要素の領域と同じ画像領域を指定します。FlexiLayout が画像に適用されると、プログラムはその要素で記述されたオブジェクトを検索します。データはそれらのオブジェクトから抽出されます。

繰り返しグループでは、いずれか 1 つのインスタンスを選択することも、すべてのインスタンス (`AllInstances`) を使用することもできます。詳細については、[繰り返しグループのインスタンスを参照要素、除外要素、またはソース要素として使用する](/ja/flexi-capture/fls/template/select-repeatable-group)を参照してください。

<div id="expression">
  ### Expression
</div>

どの要素領域とも一致しない画像上の領域を設定します。

たとえば、複数の要素の領域とその間の空間を 1 つのブロックにまとめたり、要素の領域を一定の値だけ拡張したり、要素に依存せずにブロックの座標を指定したりできます。この場合、ブロックの領域は [FlexiLayout language](/ja/flexi-capture/fls/code/general-code) で記述できます。

<Note>
  ブロックの領域は連続しています。つまり、離れた位置にある矩形から領域を作成すると、それらの間の空間は、領域を連続させるために細い追加の矩形で埋められます。
</Note>

ただし、繰り返しグループのすべてのインスタンスを参照要素として使用する場合、ブロックは複数の領域で構成されることがあります。グループブロックの領域は、仮説の領域と同様に、子ブロックの領域に基づいて計算されます。見やすくするために、最終的な領域はわずかに拡張されます。

<div id="parameters-of-group-and-repeating-group-blocks">
  ### グループブロックと繰り返しグループブロックのパラメーター
</div>

チェックマークグループと通常のグループブロックには、**Name** と **Comment** 以外のパラメーターはありません。

繰り返しグループブロックのパラメーターは、グループではないブロックと同じです。これらでは、**Has repeating instances** オプションが常に有効です。

子ブロックでは **Has repeating instances** オプションを設定することも設定しないこともできますが、`OutputInstances` 変数は常に作成されます。繰り返しグループブロック内のブロックで **Has repeating instances** オプションが有効になっている場合、そのブロックは親ブロックの各インスタンス内で繰り返すことができます。

<div id="specify-a-block-region-using-instances-of-a-repeating-group">
  ### 繰り返しグループのインスタンスを使用してブロック領域を指定する
</div>

ブロックが複数のインスタンスで定義されている場合、ブロック領域は複数の独立した領域で構成されます。繰り返しグループの特定のインスタンス (たとえば `LastFound`) を使用する場合、ブロック領域は他の要素と同様に定義されます。

一方、検出されたすべてのインスタンス (`AllInstances`) を使用することもできます。複数のインスタンスを使用するには、**Has repeating instances** オプションを選択します。

また、事前定義された `OutputInstances` 変数を使って、ブロック用のコードを記述することもできます。例:

```text theme={null}
OutputInstances = SearchElements.PageHeader.AllInstances.UnionRect;
```

ABBYY FlexiCapture は、**Has repeating instances** オプションが有効になっているブロックを次のように処理します。

* テーブル以外のブロックでは、指定されたインスタンスは対応する field のインスタンスとして扱われます。
* テーブルブロックでは、指定されたインスタンスは field の 1 つのインスタンスとして扱われます。つまり、ABBYY FlexiCapture はそのようなブロックを、不連続な領域を持つ **Table** 型の field として処理します。

<div id="rules-for-creating-references-to-elements-for-repeating-groups-of-blocks">
  ### ブロックの繰り返しグループに対する要素参照を作成する際のルール
</div>

ブロックの繰り返しグループは、[繰り返し要素](/ja/flexi-capture/fls/template/repeatable-group)を参照します。ブロックの繰り返しグループのインスタンスを作成するには、複数の要素インスタンスが必要です。そのため、いずれか 1 つの ID は `AllInstances` でなければなりません。

`AllInstances` を持つ要素の下にネストされた要素は、他の ID を持つことができません。そのため、この条件は、最下位の繰り返し要素が `AllInstances` を持つことも意味します。

ブロックの繰り返しグループの子ブロックは、親ブロックが参照する要素グループの繰り返しグループの子要素を参照します。この参照では、インスタンスに対して同じ ID を指定する必要があります。

たとえば、繰り返しグループのブロックが `SearchElements..RepGr1.Instance(1).RepGr2.AllInstances` という参照を持つ場合、その子ブロックが要素 `RepGr1..RepGr2.Element` を参照できるのは、次の場合のみです。

```text theme={null}
SearchElements.RepGr1.Instance(1).RepGr2.AllInstances.Element
```

`HasRepeatingInstances` 属性がない場合、参照できるのは、基本グループ内で内部に繰り返しを持たないサブ要素だけです。逆も同様です。

`HasRepeatingInstances` 属性がある場合は、基本グループ内で内部に繰り返しを持つ要素を参照できます (この場合、参照できるのはすべてのインスタンスをまとめたものだけです) 。

```text With a HasRepeatingInstances attribute theme={null}
SearchElements.RepGr1.Instance(1).RepGr2.AllInstances.RepGr3.AllInstances.Element
SearchElements.RepGr1.Instance(1).RepGr2.AllInstances.RepGr3.AllInstances.RepGr4.AllInstances.Element
```

```text Without a HasRepeatingInstances attribute theme={null}
SearchElements.RepGr1.Instance(1).RepGr2.AllInstances.Gr3.SubElement(where Gr3 is a simple group)
SearchElements.RepGr1.Instance(1).RepGr2.AllInstances.SubElement
```

<Note>
  **ソース要素** を介して参照が作成されている場合、チェックは FlexiLayout の構築時に実行されます。Advanced code を使用して参照が作成されている場合は、FlexiLayout のマッチング時にエラーが検出されます。
</Note>

<div id="describe-a-block-region-with-the-flexilayout-language">
  ### FlexiLayout language でブロック領域を記述する
</div>

ブロックの領域を指定するには、**Expression** field を使用します。

使用する事前定義変数は、ブロックの型と、そのブロックで **Has repeating instances** オプションが選択されているかどうかによって異なります。

| 変数                | 型                                                    |
| ----------------- | ---------------------------------------------------- |
| `OutputRegion`    | `Region`                                             |
| `OutputTable`     | `TableHypothesis`                                    |
| `OutputInstances` | `HypothesisInstances` または `TableHypothesisInstances` |

**Expression** field で使用できる事前定義変数の詳細については、[事前定義変数](/ja/flexi-capture/fls/language/predefined-variables)を参照してください。

| タスク                                                              | コード例                                                                                                                                           |
| ---------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
| 要素の領域を取得し、幅方向に 3 mm、長さ方向に 5 mm 拡張する                              | `OutputRegion = SomeElement.Rect;   OutputRegion.Inflate( 3*mm, 5*mm );`                                                                       |
| 2 つの要素の領域の矩形を結合し、結合した矩形を外接する矩形を取得する                              | `Rect outputRect;   outputRect = Element1.Rect Or Element2.Rect;   OutputRegion = outputRect;`                                                 |
| 2 つの要素の領域を外接する矩形を 1 つの領域にまとめる                                    | `RectArray outputRects;   outputRects = RectArray( Element1.Rect );   outputRects.Add: Element2.Rect;   OutputRegion = Region( outputRects );` |
| 異なる 2 つの要素に対応するオブジェクトの領域を 1 つの領域にまとめる                            | `RectArray outputRects;   outputRects = Element1.Rects;   outputRects.Add( Element2.Rects );   OutputRegion = outputRects.Region;`             |
| `Element1` の領域に属するオブジェクトの領域を結合し、`Element2` の領域に属するオブジェクトの領域を除外する | `OutputRegion = FormRegion( Element1.Rects, Element2.Rects );`                                                                                 |
| **Table** 要素を使用して **Table** ブロックを指定する                            | `OutputTable = SearchElements.TableElement;`                                                                                                   |
| 特定の要素の仮説のインスタンスを使用して **Table** ブロックを指定する                         | `OutputInstances = SearchElements.RepeatingGroup.AllInstances.TemplateElement;`                                                                |

<div id="use-the-isnull-variable">
  ## IsNull 変数を使用する
</div>

事前定義された `IsNull` 変数を使用して、ブロックの領域を記述することもできます。この変数は、FlexiLayout とのマッチング時にブロックの領域が見つかったかどうかを示します。値が `false` の場合は、その領域が見つかっています。値が `true` の場合は、見つかっていません。

`IsNull` 変数は値 `false` で初期化されるため、ブロックの領域は見つかっているものと見なされます。ただし、場合によっては、結論を出す前に特定の条件を確認する必要があります。

ソース要素の領域の幅が 50 ドットを超える場合に、ブロックの領域を見つかったものと見なすようプログラムに指示するには、**Region Expression** フィールドに次のコードを入力します。

```text theme={null}
if Element1.Width < 50dt then IsNull = true;
```

`Element1` が見つかった場合にのみブロックの領域を見つかったものと見なすようプログラムに指示するには、**Region Expression** フィールドに次のコードを入力します。

```text theme={null}
IsNull = Element1.IsNull
```

`Element1` と `Element2` を使用してブロックを検索する必要があるとします。少なくとも 1 つの要素が見つかっていない場合、そのブロックは見つからなかったものと見なされます。

```text theme={null}
Rect outputRect;
Let FieldLeft = Element1.Rect.Left;
Let FieldRight = Element2.Rect.Right;
Let FieldTop = Element1.Rect.Top;
Let FieldBottom = Element2.Rect.Bottom;
outputRect = Rect( FieldLeft, FieldTop, FieldRight, FieldBottom);
if ((Element1.IsNull == True) or (Element2.IsNull == True) ) then {IsNull = true;}
OutputRegion = outputRect;
```

<Note>
  このコードが正しく機能するのは、`Element1` の検索領域が `Element2` の検索領域より上かつ左にある場合だけです。

  前述の例では、簡潔にするため、この条件の確認は省略しています。実際のコードでは、この確認が必要であり、`FieldLeft`、`FieldRight`、`FieldTop`、`FieldBottom` 変数の値も調整しなければなりません。そうしないと、`Rect` 関数を呼び出したときにエラーが返されます。
</Note>
