ABBYY FlexiLayout Studio では、複数ページにまたがるテーブル、つまり文書の複数のページにまたがって続き、すべてのページで列の順序と数が同じテーブルを検出できます。列の幅や正確な位置はページごとに若干異なる場合があります (プログラムで許容される最大のずれは 1 インチです) 。
簡潔にするため、以降では、複数ページにまたがるテーブルのうち 1 ページ上にある各部分を 1 ページのサブテーブル と呼びます。
複数ページにまたがるテーブルでは、ヘッダーが各ページに繰り返し表示される場合と、最初のページに 1 回だけ表示される場合があります。Header is on each page オプションは、すべてのページでヘッダーを検出するかどうかを指定します。このオプションが無効になっている場合、ABBYY FlexiLayout Studio は最初の 1 ページのサブテーブルでのみヘッダーを検索します。
同様に、テーブルのフッターも、最後のページに 1 回だけ表示される場合と、各ページの下部に表示される場合があります。Footer is on each page オプションは、すべてのページでフッターを検出するかどうかを指定します。このオプションが無効になっている場合、ABBYY FlexiLayout Studio は最後の 1 ページのサブテーブルでのみフッターを検索します。
プログラムは、ユーザーが指定した検索領域の先頭ページから複数ページにまたがるテーブルの検索を開始し、以降のページでも検索を続けます。検索は、次のいずれかの条件に当てはまると終了します。
- フッターが最後のページにのみ存在する必要があり、そのフッターが検出された場合。
- プログラムが、そのテーブルに対して指定された検索領域の末尾に達した場合。
- プログラムがページ上で 1 ページのサブテーブルを1つも検出しなかった場合。つまり、ヘッダー、フッター、またはテーブル本体のいずれも見つからなかった場合です。
複数ページのテーブルで、別の要素の領域を使って列名を検出する
複数ページにまたがるテーブルでも、テーブルまたはそのサブテーブルのヘッダーやフッターを検索するには、引き続き 2 つのメソッドを使用できます。1 つはキーワードを指定する方法 (Detect by keyword オプション) 、もう 1 つは、すでに検出された要素をヘッダーまたはフッターとして使用する方法 (Use found element as… オプション) です。前者のメソッドを使用すると、プログラムはヘッダーまたはフッターが現れる可能性のあるページ (Header/Footer occurs on every page オプションで指定) で、指定したキーワードを検索します。キーワードでは処理対象の画像上の列名を確実に検出できない場合は、Use found element as… オプションを使用してください。
複数ページのテーブルで、ヘッダーが最初のページにのみ、フッターが最後のページにのみ現れる場合は、1 ページのテーブルと同様に、すでに検出されている単純要素を使用できます。このメソッドは Sample 3 で使用されています (%public%\ABBYY\FlexiCapture\12.0\Samples\FLS\English\Invoice のプロジェクトを参照) 。ただし、ヘッダーまたはフッターをすべてのページで検出する必要がある場合は、すでに検出されている繰り返しグループのサブ要素を使用するのが最適です。繰り返しグループを使用すると、繰り返しグループ内でヘッダーを 1 回だけ記述し、その繰り返しグループに可能なインスタンス数を指定することで、すべてのページでヘッダーを見つけることができます。要素ツリーで Table 要素 が繰り返しグループの下に記述されている場合は、目的のサブ要素のすべてのインスタンス (AllInstances) を使用して、列名を繰り返しグループで参照します。この方法の例については、%public%\ABBYY\FlexiCapture\12.0\Samples\FLS\English\Invoice with Repeatable Groups のサンプルプロジェクトを参照してください) 。
ページ上に選択した繰り返しグループのインスタンスが複数ある場合は、先頭のインスタンスが列名として使用されます。
ドキュメントによっては、1 ページ内に同一のテーブルが複数存在することがあります (これらのテーブルでは、配置や列の順序が同じ場合があります) 。また、一連のテーブルの最後の 1 つが途中で途切れ、次のページに続くこともあります。テーブルとテーブルの間には、表題や説明メモなどのテキストデータや視覚的な書式要素が入る場合があります。
このようなテーブルは、テーブルの 1 つのインスタンスを表す Table 要素を 繰り返しグループ の中に配置することで検出できます。これにより、テーブル全体のセットを 1 つの Table 要素で記述し、その Table 要素を含む 繰り返しグループ のプロパティで、各インスタンスの繰り返し回数を指定できます。
すでに検出された要素に基づいて列名を検出するために Use found element as… オプションを使用している場合は、この要素を Table 要素の上にある同じ 繰り返しグループ 内に配置すると便利です。この場合、列名の検出に使用する補助要素を選択するときは、繰り返しグループ 内にある補助要素の現在のインスタンス (CurrentInstance) を参照してください。こうすると、プログラムは各列名のインスタンスを検索する際に、それに対応する補助要素のインスタンスを使用します。この方法の例については、%public%\ABBYY\FlexiCapture\12.0\Samples\FLS\English\Prices のサンプルプロジェクトを参照してください) 。