メインコンテンツへスキップ
ABBYY FlexiLayout Studio には、請求書プロジェクト向けの追加の FlexiLayout を開発するための特長がいくつかあります。
  • 請求書プロジェクトのメイン FlexiLayout の適用時に検出されたフィールドの領域を基準に、要素の位置を指定できます。
  • ベンダーおよび事業部門の識別子を、Document Definition のデータ セットへのリクエストで使用できます。
  • FlexiLayout のキーワードのリストやその他のパラメーターを XML ファイルにエクスポートできるため、FlexiLayout や Document Definition を編集しなくてもそれらを編集できます。
  1. FC で認識済みの請求書が含まれるバッチを開きます。
  2. ABBYY FlexiLayout Studio で新しいプロジェクトを作成します。メイン メニューで、Tools → Export Batch to FlexiLayout Studio → Create New FlexiLayout Studio Project… を選択します。
このコマンドは、お使いのコンピューターに保存されている FC プロジェクトでのみ使用できます。FC の Distributed バージョンを使用していて、プロジェクトがサーバーに保存されている場合は、まず Project メニューの Export Project… をクリックして、 プロジェクトをコンピューターにダウンロードする必要があります。
ABBYY FlexiLayout Studio プロジェクトの接尾辞は、プロジェクト作成時点の Document Definition のバージョンを示します。
作成した ABBYY FlexiLayout Studio プロジェクトには、FC バッチ内のすべてのドキュメントと、FC での認識時に検出されたフィールドの領域が reference layout として含まれています。

ツリー

ノード

説明

SearchElements

CommonBlockRegions

このノードには、Document Definition のすべてのフィールドに対応する要素が含まれます。FC で各ドキュメントに FlexiLayout を適用した際に検出された、すべてのブロック領域の座標が ABBYY FlexiLayout Studio プロジェクトに保存されます。既定では、これらの座標を持つ領域は、Document Definition 内のフィールドと同じ名前を持つ要素に割り当てられます。これにより、要素の相対位置の指定や新しい要素の作成に利用できます。

CustomSearchElements

このノードにはサンプル要素が含まれています。FlexiLayout の適用時に干渉しないよう、既定では無効になっています。

DataSetRequestSample - Document Definition に保存されているベンダーおよび事業部門のデータ セットへのリクエストの例です。このデータ セットには、ベンダーおよび事業部門の識別子が含まれます。

追加の FlexiLayout にフィールドを追加するには、そのフィールド用のブロックを作成し、その検索要素を指定する必要があります。Document Definition 内のフィールドには一意の名前が必要です。つまり、次のことを意味します。
  • フィールドの検索ロジックを記述するには、一意の名前を持つブロックを作成する必要があります。
  • すでに Document Definition に存在するフィールドの検索ロジックを変更するには、同じ名前のブロックを作成する必要があります。
新しいイメージで追加の FlexiLayout に加えた変更をテストする場合は、FC のバッチを ABBYY FlexiLayout Studio の既存の請求書プロジェクトにエクスポートできます。バッチをエクスポートするには、Tools → Export Batch to FlexiLayout Studio → Add to Existing FlexiLayout Studio Project… をクリックします。
  • FC バッチをエクスポートできるのは、Tools → Export Batch to FlexiLayout Studio → Create New FlexiLayout Studio Project… を選択して作成された ABBYY FlexiLayout Studio プロジェクトのみです。
  • FC バッチを ABBYY FlexiLayout Studio にエクスポートすると、そのバッチ用の新しいバッチが ABBYY FlexiLayout Studio に作成されます。
  • 新しい Document Definition のフィールド数が、ABBYY FlexiLayout Studio プロジェクトで使用されている Document Definition より多い場合、エクスポート ログには追加された各フィールドに対する警告が含まれます。
  • プログラムで追加フィールドをエクスポートするには、追加された各フィールドについて、SearchElements ツリーの CommonBlockRegions ノードに同じ名前のブロックを追加します。
サンプルリクエストはDataSetRequestSample要素で確認できます。この要素はデフォルトで無効になっています。
説明
NamedValue名前付き値
コンストラクター
NamedValue( String, String )
メソッド
String Name()名前付き値の名前を返します
String Value()名前付き値の値を返します
NamedValueArray名前付き値の配列
コンストラクター
NamedValueArray()
NamedValueArray( NamedValue namedValue )
メソッド
Int Count()配列内の要素数を返します。
NamedValue GetAt( Int index )指定した index の要素を返します。
Void Add( NamedValue namedValue )名前付き値を配列に追加します。
Void Add( NamedValueArray namedValueArray )名前付き値配列に別の名前付き値配列を追加します。
Void InsertAt( Int index, NamedValue namedValue )namedValue を指定したインデックス位置に挿入します。
Void DeleteAll()配列内のすべての要素を削除します。
Void DeleteAt( Int index )指定したインデックス位置にある要素を削除します。
Int FindByName( String name )name という名前の値の位置を返します。

関数

構文:
  • Document Definition へのパスとデータセット名は、ABBYY FlexiLayout studio で FlexiLayout を使用する際にデータセットへアクセスするために使用されます。
  • FCでコンパイル済みのFlexiLayoutをDocument Definitionに追加すると、データセットにアクセスする際に使用されるのはその名前だけです。
  • connectionString の形式:
“dbtype=FCDataset;fcTemplate=path_to_Document_Definition;datasetName=name_of_Data_Set;”注意: パスの各部分はダブルバックスラッシュ "" で区切る必要があります。
  • searchFields 値を取得する対象の列名の配列。
  • searchCriteria Column-Entry のペアの配列。空の場合は、すべての値が返されます。
    • リクエストに1つのfieldに対する複数の値が含まれる場合は、OR 演算子を使用します
    • リクエストに、それぞれが1つのfieldのみに対応する複数の値が含まれる場合は、AND 演算子を使用します
    • リクエストに1つのfieldに対する複数の値と複数のfieldに対する値が含まれる場合は、1つのfieldに対する複数の値を区切るために OR 演算子を使用し、複数のfieldの値を結び付けるために AND 演算子を使用します。
定義説明
Logic TestAccessToFCDataSet( String connectionString )データセットへの接続をテストします
Logic TestFCDataSetSearchCriteria( String connectionString, StringArray searchFields, NamedValueArray searchCriteria )データセットの検索条件をテストします
StringArray FieldNamesOfFCDataset( String connectionString )データセット内のすべてのfieldを、インデックス番号の昇順に並べたリストを返します。
StringArray FieldNamesOfFCDataset( String connectionString, StringArray searchFields )指定したデータセットのfieldを、インデックス番号の昇順に並べたリストを返します。複雑な列がある場合は、RecordOfFCDataset関数と組み合わせて使用してください。
Int RecordCountOfFCDataset( String connectionString, StringArray searchFields, NamedValueArray searchCriteria )検索条件で指定したデータセット内のエントリ数を返します。RecordOfFCDataset 関数で返される可能性のあるエントリ数を確認するために使用します。
Void PrepareRecordsetOfFCDataset( String connectionString, StringArray searchFields, NamedValueArray searchCriteria, Int maxRecordsCount = DefaultMaxRecordsCount )データ セットへのクエリ用データを準備します。RecordOfFCDataset 関数を呼び出す前に、新しい検索条件セットごとにこの処理を実行する必要があります。
StringArray RecordOfFCDataset( String connectionString, StringArray searchFields, NamedValueArray searchCriteria, Int rowIndex )データセットに対するクエリで返された結果のうち、番号 rowIndex のエントリに含まれる値の配列を返します。値の数は、searchFields に渡された field の数と同じです (複合列の場合も含みます) 。
Quality ValidateByFCDataSet( String word, String connectionString, Int fieldIndex, NamedValueArray searchCriteria, Int maxErrors, Rational maxErrorsPart, Logic ignoreSpaces = true, Int maxRecordsCount = DefaultMaxRecordsCount );文字列 word の品質を返します。field のインデックス番号を受け取ります。インデックス番号は、FieldNamesOfFCDataset 関数の出力をインデックス参照することで取得できます。
Void SearchTextFromFCDataSet( String connectionString, Int fieldIndex, NamedValueArray searchCriteria, Int maxRecordsCount = DefaultMaxRecordsCount )この関数は、Static Text 関数で単語の検索条件を指定するために使用します。この関数を呼び出すと、既存の検索条件は新しい条件に置き換えられます。field のインデックス番号を指定します。インデックス番号は、FieldNamesOfFCDataset 関数の出力にインデックスを指定して取得できます。
Void RegularExpressionFromFCDataSet( String connectionString, Int fieldIndex, NamedValueArray searchCriteria, Int maxRecordsCount = DefaultMaxRecordsCount )この関数は、CharString 関数に対する検索条件を正規表現で指定するために使用します。この関数を呼び出すと、既存の検索条件は新しい条件に置き換えられます。field のインデックス番号を受け取ります。インデックス番号は、FieldNamesOfFCDataset 関数の出力にインデックスを付けることで取得できます。

外部データベースの列から画像上の行を検索する方法

  1. FieldNamesOfFCDataset を使用して、インデックス番号の昇順に並べ替えられた列の一覧を取得します。
  2. データを探す列のインデックス番号を特定します。
  3. データセット内のデータを絞り込むための条件の配列を作成します。
  4. 列のインデックス番号とフィルター条件を SearchTextFromFCDataSet に渡します (正規表現を使用する場合は、代わりに RegularExpressionFromFCDataSet に渡します) 。
このコードは、認識済みバッチがFCからエクスポートされると自動的に生成されます

外部データベースの複数の列のエントリを画像から検索する方法

SearchTextFromFCDataSet 関数を呼び出すたびに検索パラメーターが置き換えられるため、この関数を複数回呼び出しても意味がありません。回避策としては、外部データベースから文字列を取得して SearchText 関数に渡す方法があります。この関数を呼び出すと、既存の検索パラメーターが置き換えられるのではなく、文字列が追加されます。これを行うには、次の手順を実行します。
  1. データを検索する必要がある列名の配列を作成します。
  2. データセット内のデータを絞り込むためのフィルター条件の配列を作成します。
  3. RecordCountOfFCDataset 関数を使用して、返されるエントリ数を特定します。
  4. PrepareRecordsetOfFCDataset 関数を使用して、クエリデータを準備します。
  5. すべてのレコードを順に処理し、RecordOfFCDatasetメソッドを使用して各レコードに対応する配列を取得します。
  6. 配列内の各要素の値を SearchText 関数に渡します。

複雑な列を扱う場合の注意事項

  • FieldNamesOfFCDataset 関数は、複合列の名前が複数回含まれる配列を返します。出現回数は、エンコードされた外部データベース内の列インスタンス数と同じです。 : {VendorId, VATID, Name, Name, Name, City}。この場合、外部データベースには、データセット内の 1 つの複合列 Name に対応する列が 3 つ含まれています。
  • SearchCriteria に、複合カラムに対応する field に対する条件 (上記の例のような) が含まれている場合、その条件は、これらのカラムインスタンスすべてをチェックするために使用されます。
  • searchFields に、複合列に対応する field の条件 (上記の例のようなもの) が含まれている場合、結果には各列インスタンスの値の配列が含まれます。 たとえば、{VendorId, VATID, Name, Name, Name, City} に対してリクエストすると
searchFields = { VATID, Name, City}, you will receive
{VATID_value, Name_valueInColumn1, Name_valueInColumn2, Name_valueInColumn3, City_value}
  • searchFields 配列を FieldNamesOfFCDataset 関数に渡すことで、返される列の一覧を取得できます。
ABBYY FlexiLayout Studio のドキュメントで説明されている 2 つの標準関数を使用して、FlexiLayout 設定を含む XML ファイルにリクエストできます。
StringArray ReadFromXML(String filename, String xPathQuery)
String ReadSingleStringFromXML(String filename, String xPathQuery)
ABBYY FlexiLayout Studio で FlexiLayout の作業時にこのファイルを使用する場合は、ABBYY FlexiLayout Studio プロジェクト フォルダー配下のサブフォルダーに配置する必要があります。このファイルへのパスは、ABBYY FlexiLayout Studio のプロジェクト ファイルからの相対パスです。コンパイル済みの FlexiLayout を FC の Document Definition にロードし、追加の FlexiLayout として使用する場合、XML ファイルは Templates フォルダーに配置され、編集できるようになります。FlexiLayout が適用されると、プログラムがこのファイルへのアクセスを自動的に管理します。