> ## 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 8: Table 要素、InvoiceTable 要素

> 準備した要素を組み合わせて、マスター列と列の content type を使用し、複数ページにまたがる invoice テーブルを検索する InvoiceTable Table 要素を作成します。

必要な準備がすべて整ったので、これから Table 要素 を作成して Invoice Table field を検索できます。

1. テーブルの **ヘッダー**。前に決めたとおり、すでに検出されている補助要素を使って列名を指定します。
2. テーブルの **フッター**。前に決めたとおり、**フッター** は、最終部分の開始を識別する **InvoiceFooter** グループの、すでに検出されている必須要素 **Paragraph** を使用して指定します。この要素は、テーブルの最下部に最も近い要素として定義済みです。
3. テーブルの検索領域。ほかの用途では不要な最後の **Sales** 列の名前を使って、右側の検索領域を制限できます。

<div id="create-the-invoicetable-element">
  ## InvoiceTable 要素を作成する
</div>

InvoiceTable 要素を作成するには、次の手順を実行します。

1. **SearchElements** ツリーで、型が Table の要素を作成し、**InvoiceTable** という名前を付けます。
2. Columns タブをクリックします。
3. **Select** をクリックし、[Step 3](/ja/flexi-capture/fls/tutorial4/4step3) で先ほど作成した **InvoiceTable** ブロックを検索対象のブロックとして選択します。
4. テーブル列の検索パラメーターを指定します。
   * 列の一覧で **Reference** を選択し、**プロパティ...** ボタンをクリックします。
     この列名には、前の手順で検出した `TableHeader.kwReference` 要素を使用します。使用するには、Use found element as column name を選択し、<img src="https://mintcdn.com/abbyy/fmgRWFNHKYN2MLSg/images/flexi-capture/fls/Browse_Button.gif?s=3673db30dda4a3293aec716853588b55" alt="参照ボタン" style={{display:"inline-block",verticalAlign:"middle",margin:0}} width="21" height="20" data-path="images/flexi-capture/fls/Browse_Button.gif" /> をクリックして `TableHeader.kwReference` を選択します。
   * 列の一覧で **Designation** を選択し、**プロパティ...** ボタンをクリックします。
     この列名には、前の手順で検出した `TableHeader.kwDesignation` 要素を使用します。
   * 列の一覧で **Unit** を選択し、**プロパティ...** ボタンをクリックします。
     この列名には、前の手順で検出した `TableHeader.kwUnit` 要素を使用します。
   * 列の一覧で **Quantity** を選択し、**プロパティ...** ボタンをクリックします。
     この列名には、前の手順で検出した `TableHeader.kwQuantity` 要素を使用します。
   * 列の一覧で **UnitPrice** を選択し、**プロパティ...** ボタンをクリックします。
     この列名には、前の手順で検出した `TableHeader.kwUnitPrice` 要素を使用します。
   * 列の一覧で **Total** を選択し、**プロパティ...** ボタンをクリックします。
     この列名には、前の手順で検出した `TableHeader.kwTotal` 要素を使用します。
5. Order タブをクリックします。
6. 検索対象の列は、他の列 (たとえば **ExtraQtyTag**) によって間に別の列が入る場合がありますが、列の順序は常に固定されています (最初が **Designation**、次が **Unit Price**、その次が **Total**) 。そのため、Rules for column order を選択し、Add... をクリックして、列を次の順序で追加します: **Designation** \<\< **Unit Price** \<\< **Total**。

<Frame>
  <img src="https://mintcdn.com/abbyy/8aWHPAJyzWmTqglX/images/flexi-capture/fls/tutorial4_8_1_.PNG?fit=max&auto=format&n=8aWHPAJyzWmTqglX&q=85&s=966aae17c9b42b5787008df2964196c7" alt="ABBYY FlexiLayout Studio の InvoiceTable Table 要素のプロパティにある Order タブのスクリーンショット。Rules for column order が選択され、Designation、Unit Price、Total の各列が必要な順序で追加されていることを示しています。" width="431" height="455" data-path="images/flexi-capture/fls/tutorial4_8_1_.PNG" />
</Frame>

7. ヘッダー タブをクリックします。テーブルの ヘッダー は必要ですが、追加の制約はないため、デフォルト値のままにします。
8. フッター タブをクリックします。テーブルの末尾部分には、前の手順で検出した `InvoiceFooter.Paragraph` 要素を使用します。Use found element as footer オプションを選択し、<img src="https://mintcdn.com/abbyy/fmgRWFNHKYN2MLSg/images/flexi-capture/fls/Browse_Button.gif?s=3673db30dda4a3293aec716853588b55" alt="参照ボタン" style={{display:"inline-block",verticalAlign:"middle",margin:0}} width="21" height="20" data-path="images/flexi-capture/fls/Browse_Button.gif" /> をクリックしてから、`InvoiceFooter.Paragraph` 要素を選択します。

<Frame>
  <img src="https://mintcdn.com/abbyy/8aWHPAJyzWmTqglX/images/flexi-capture/fls/tutorial4_8_2_.PNG?fit=max&auto=format&n=8aWHPAJyzWmTqglX&q=85&s=e7a855370a3d7b6766311f63e86cd3b8" alt="ABBYY FlexiLayout Studio の InvoiceTable Table 要素のプロパティにあるフッター タブのスクリーンショット。Use found element as footer オプションが選択され、InvoiceFooter.Paragraph 要素がテーブルフッターとして選択されていることを示しています。" width="431" height="455" data-path="images/flexi-capture/fls/tutorial4_8_2_.PNG" />
</Frame>

9. Rows タブをクリックします。
10. 一部の列のセルには複数行が含まれる場合があるため、行を分割するためのマスター列を指定する必要があります。マスター列を使用して行を検出する を選択します。

    まず **Total** 列を指定します。この列には常にデータがあり、各テーブルレコードでこの列には 1 行のデータが含まれます。

    この列が画像上で検出されない場合は、次の行分割オプションとして **Unit Price** 列と **Quantity** 列を指定します。これらの列を選択するには、<img src="https://mintcdn.com/abbyy/fmgRWFNHKYN2MLSg/images/flexi-capture/fls/Browse_Button.gif?s=3673db30dda4a3293aec716853588b55" alt="参照ボタン" style={{display:"inline-block",verticalAlign:"middle",margin:0}} width="21" height="20" data-path="images/flexi-capture/fls/Browse_Button.gif" /> ボタンを使用します。

<Frame>
  <img src="https://mintcdn.com/abbyy/8aWHPAJyzWmTqglX/images/flexi-capture/fls/tutorial4_8_3_.PNG?fit=max&auto=format&n=8aWHPAJyzWmTqglX&q=85&s=d99574eef5ef1d5016f41d5be1001b5a" alt="ABBYY FlexiLayout Studio の InvoiceTable Table 要素のプロパティにある Rows タブのスクリーンショット。マスター列を使用して行を検出する が選択され、行分離のためのマスター列として Total、Unit Price、Quantity の各列が指定されていることを示しています。" width="431" height="455" data-path="images/flexi-capture/fls/tutorial4_8_3_.PNG" />
</Frame>

11. \[Relations] タブを選択します。対象のテーブル列は **Sales** 列名の左側にあるため、次の検索条件を追加します。

    * `TableHeader.kwSales` 要素の左、Offset = 0

    <Tip>
      画像品質が低い場合 (たとえば、テーブルの body と フッター の間に noise がある場合や、ヘッダー または フッター がない場合) は、テーブルの上限と下限を指定できます。この場合、上限には **kwDesignation** 要素、下限には **Paragraph** 要素を使用できます。\[Relations] タブで、次の検索条件を追加します。

      * **kwDesignation** 要素の上側の boundary より下、Offset = -50、Reference boundary = Top
      * **Paragraph** 要素より上、Offset = -50、Reference boundary = Bottom
    </Tip>

12. テスト画像に対して FlexiLayout を Match します。
    プログラムはすべての画像で Table 要素 を正しく検出しますが、一部の画像では **Quantity** 列に直前の列の不要なテキストが含まれています。
    **Quantity** 列の正しいデータと不要なデータを区別するために、この列の content type を指定します。

13. Table 要素 **InvoiceTable** の **Properties** ダイアログを開きます。
    \[Columns] タブをクリックし、**Quantity** 列の \[プロパティ...] ダイアログを開いて、\[Check content type] オプションを選択します。\[Type of column content] で \[Number] を選択します。

<Frame>
  <img src="https://mintcdn.com/abbyy/8aWHPAJyzWmTqglX/images/flexi-capture/fls/tutorial4_8_4_.PNG?fit=max&auto=format&n=8aWHPAJyzWmTqglX&q=85&s=c646cd956bf3591f3505ebe3395c886e" alt="ABBYY FlexiLayout Studio の Quantity 列のプロパティのスクリーンショット。Check content type オプションが選択され、列内容の型として Number が選ばれています。" width="462" height="377" data-path="images/flexi-capture/fls/tutorial4_8_4_.PNG" />
</Frame>

14. ここで画像に対して FlexiLayout を Match すると、**Quantity** 列には必要なとおり数字だけが含まれることがわかります。
15. 同様に、**UnitPrice** 列と **Total** 列には通貨 content を指定します。
16. **InvoiceTable** ブロック の位置を指定するには、\[Source 要素] オプションを選択します。<img src="https://mintcdn.com/abbyy/fmgRWFNHKYN2MLSg/images/flexi-capture/fls/Browse_Button.gif?s=3673db30dda4a3293aec716853588b55" alt="参照ボタン" style={{display:"inline-block",verticalAlign:"middle",margin:0}} width="21" height="20" data-path="images/flexi-capture/fls/Browse_Button.gif" /> をクリックし、source 要素 として **InvoiceTable** を指定します。
