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

InvoiceTable 要素を作成する

InvoiceTable 要素を作成するには、次の手順を実行します。
  1. SearchElements ツリーで、型が Table の要素を作成し、InvoiceTable という名前を付けます。
  2. Columns タブをクリックします。
  3. Select をクリックし、Step 3 で先ほど作成した InvoiceTable ブロックを検索対象のブロックとして選択します。
  4. テーブル列の検索パラメーターを指定します。
    • 列の一覧で Reference を選択し、プロパティ… ボタンをクリックします。 この列名には、前の手順で検出した TableHeader.kwReference 要素を使用します。使用するには、Use found element as column name を選択し、参照ボタン をクリックして 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
ABBYY FlexiLayout Studio の InvoiceTable Table 要素のプロパティにある Order タブのスクリーンショット。Rules for column order が選択され、Designation、Unit Price、Total の各列が必要な順序で追加されていることを示しています。
  1. ヘッダー タブをクリックします。テーブルの ヘッダー は必要ですが、追加の制約はないため、デフォルト値のままにします。
  2. フッター タブをクリックします。テーブルの末尾部分には、前の手順で検出した InvoiceFooter.Paragraph 要素を使用します。Use found element as footer オプションを選択し、参照ボタン をクリックしてから、InvoiceFooter.Paragraph 要素を選択します。
ABBYY FlexiLayout Studio の InvoiceTable Table 要素のプロパティにあるフッター タブのスクリーンショット。Use found element as footer オプションが選択され、InvoiceFooter.Paragraph 要素がテーブルフッターとして選択されていることを示しています。
  1. Rows タブをクリックします。
  2. 一部の列のセルには複数行が含まれる場合があるため、行を分割するためのマスター列を指定する必要があります。マスター列を使用して行を検出する を選択します。 まず Total 列を指定します。この列には常にデータがあり、各テーブルレコードでこの列には 1 行のデータが含まれます。 この列が画像上で検出されない場合は、次の行分割オプションとして Unit Price 列と Quantity 列を指定します。これらの列を選択するには、参照ボタン ボタンを使用します。
ABBYY FlexiLayout Studio の InvoiceTable Table 要素のプロパティにある Rows タブのスクリーンショット。マスター列を使用して行を検出する が選択され、行分離のためのマスター列として Total、Unit Price、Quantity の各列が指定されていることを示しています。
  1. [Relations] タブを選択します。対象のテーブル列は Sales 列名の左側にあるため、次の検索条件を追加します。
    • TableHeader.kwSales 要素の左、Offset = 0
    画像品質が低い場合 (たとえば、テーブルの body と フッター の間に noise がある場合や、ヘッダー または フッター がない場合) は、テーブルの上限と下限を指定できます。この場合、上限には kwDesignation 要素、下限には Paragraph 要素を使用できます。[Relations] タブで、次の検索条件を追加します。
    • kwDesignation 要素の上側の boundary より下、Offset = -50、Reference boundary = Top
    • Paragraph 要素より上、Offset = -50、Reference boundary = Bottom
  2. テスト画像に対して FlexiLayout を Match します。 プログラムはすべての画像で Table 要素 を正しく検出しますが、一部の画像では Quantity 列に直前の列の不要なテキストが含まれています。 Quantity 列の正しいデータと不要なデータを区別するために、この列の content type を指定します。
  3. Table 要素 InvoiceTableProperties ダイアログを開きます。 [Columns] タブをクリックし、Quantity 列の [プロパティ…] ダイアログを開いて、[Check content type] オプションを選択します。[Type of column content] で [Number] を選択します。
ABBYY FlexiLayout Studio の Quantity 列のプロパティのスクリーンショット。Check content type オプションが選択され、列内容の型として Number が選ばれています。
  1. ここで画像に対して FlexiLayout を Match すると、Quantity 列には必要なとおり数字だけが含まれることがわかります。
  2. 同様に、UnitPrice 列と Total 列には通貨 content を指定します。
  3. InvoiceTable ブロック の位置を指定するには、[Source 要素] オプションを選択します。参照ボタン をクリックし、source 要素 として InvoiceTable を指定します。