> ## 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. ステップ 4: 要素を検出する順序を決定するための画像の解析

> 請求書画像を解析し、複数ページ文書の最初と最後のページを識別する Header 要素と Footer 要素を含めて、要素の検出順序を決定します。

この段階では、次の点を明らかにする必要があります。

* 画像上の field の配置に、何らかのパターンや規則性はありますか。
* データfield を探す際に、どの要素を手がかりにできますか。
* 要素はどの順序で検索すべきですか。(これは重要です。後続の各ステップでは、直前のステップで見つかった要素しか利用できないためです。)

これは複数ページ文書であるため、まず文書の最初と最後のページを識別するために使用できるオブジェクトを特定します。これらのオブジェクトは、特別な複合 Header 要素と Footer 要素で記述できます。

* Header 要素は、文書の最初のページにのみマッチする必要があります。

プロジェクトに他の文書タイプの文書も含まれている場合、この要素は識別子としても使用されます(つまり、この文書タイプを識別する固有の特徴です)。

* Footer 要素は、文書の最後のページにのみマッチする必要があります。このグループ内に必須のサブ要素を作成し、Footer 要素が他の文書ページにマッチしないようにしてください。

画像を解析すると、次のことがわかります。

1. 最初のページには、**InvoiceNumber**、**InvoiceDate**、**DeliveryAddress** で構成される field グループがあります。**InvoiceNumber** field の名前は常に各文書の先頭にありますが、**InvoiceDate** と **DeliveryAddress** は常に存在するとは限りません。
   * **InvoiceNumber** field と **InvoiceDate** field は、対応する名前の右側または下側に配置されます。
   * **DeliveryAddress** についても、検索領域を制限したうえで、対応する名前の右側または下側を探します。さらに、下方向の検索領域を制限するための要素も必要です。
   * 一部の画像ではこれらの field に値がないため、次の条件を指定するとマッチング処理を高速化できます。field の名前が検出されていない場合は、その field の値を探さないようにします。

2. この field グループは、文書の識別子として使用できます。これらの field は、**InvoiceHeader** という名前の複合 Header 要素の一部として記述されます。

3. 文書の最後のページには、テーブルの下に **TOTAL AMOUNT MUST**、**Carried over**、**Total CHF**、**TOTAL** という単語があります。ただし、これらの単語は文書内の他の場所(たとえば、名前やテーブル本体)にも現れることがあります。これらの単語を見つけるには、追加の参照要素(たとえば、テーブルの列名)を使用する必要があります。これらの参照要素は、検索領域を制限するのに役立ちます。

4. 最後のページを記述する要素は、**InvoiceFooter** という名前の複合 Footer 要素の一部になります。

5. Footer 要素が文書の最後のページにのみマッチするようにするには、必須要素を含める必要があります。最後のページを識別する単語(項目 3 を参照)は各文書の最後のページに現れるため、それらを記述する要素を必須要素にしてください。

6. テーブル(**InvoiceTable** という名前にします)は最初のページで始まり、最後のページで終わります。さらに、テーブルの前には常に最初のページに列名があります。テーブルの終わり(最後のページ上)を識別するには、補助要素(たとえば、**InvoiceFooter** グループの必須要素)を使用します。

   <Info>
     文書の全ページの集合は、マルチページキャンバスと呼ばれます。マルチページキャンバスは、文書のすべてのページを隙間なく上から下へ連結し、すべてのページの左境界が点 (0, 0) を通る同じ軸上に来るようにして形成されます。ページを連結する順序は、バッチ内のページ順によって決まります。したがって、指定できるのはテーブルの開始位置(最初のページ上のヘッダー)と終了位置(最後のページ上のフッター)だけです。プログラムは文書全体、つまりマルチページキャンバス全体でテーブルを検索します。
   </Info>

7. **Company** field の会社名は、常に最初のページの上部 3 分の 1 の範囲で探します。

8. **Total Amount** field の名前は、常に最後のページのテーブルの下にあります。field の値は、名前の右側または下側にあります。
