-
Liquid error: Index was outside the bounds of the array.
追加 FlexiLayout を作成するための ABBYY FlexiLayout Studio の特別機能
ABBYY FlexiLayout Studio には、インボイスプロジェクト用に追加 FlexiLayouts を開発できる特別機能が搭載されています:
- インボイスプロジェクトのメイン FlexiLayout の適用時に検出されたフィールドの領域に対するエレメントの相対位置を指定できます。
- 文書定義のデータセットに対する要求で、ベンダーや部署の識別子を使用できます。
- FlexiLayout のキーワードやその他のパラメータのリストを XML ファイルにエクスポートすると、FlexiLayout や文書定義を編集することなく編集できます。
追加 FlexiLayout を作成する方法
- 認識したインボイス付きのバッチをABBYY FlexiCapture。
- ABBYY FlexiLayout Studio で新しいプロジェクトを開きます。メインメニューで、ツール → FlexiLayout Studio へバッチのエクスポート →FlexiLayout Studio プロジェクトを新規作成...。
注:このコマンドが使用できるのは、コンピュータに保存されているABBYY FlexiCaptureプロジェクトの場合だけです。使用しているのがABBYY FlexiCaptureの分散版で、プロジェクトがサーバーに保存されている場合は、プロジェクトをエクスポート...をプロジェクトメニュー。
注:ABBYY FlexiLayout Studio プロジェクトのサフィックスは、プロジェクト作成時の文書定義のバージョンを示しています。
作成した ABBYY FlexiLayout Studio プロジェクトには、ABBYY FlexiCaptureバッチからの全文書、ABBYY FlexiCaptureで認識中に検出されたフィールドの領域が参照レイアウトの形式で含まれています。
| ツリー | ノード | 説明 |
| SearchElements | CommonBlockRegions | このノードには、文書定義のすべてのフィールドに対応するエレメントが含まれています。FlexiLayout がABBYY FlexiCaptureの各文書に適用された時に検出された、すべてのブロック領域の座標は、ABBYY FlexiLayout Studio プロジェクトに保存されます。既定で、これらの座標を持つ領域が、文書定義にあるフィールドと同じ名前を持つエレメントに割り当てられます。これにより、エレメントの相対位置の指定と新しいエレメントの作成にその領域を使用できます。 |
| CustomSearchElements |
このノードにはサンプルエレメントが含まれています。FlexiLayout の適用時に干渉しないよう、既定では無効になっています。 DataSetRequestSample 文書定義に保存されているベンダーや部署のデータセットに対するリクエストの例です。このデータセットには、ベンダーや部署の識別子が含まれています。 |
追加 FlexiLayout にフィールドを追加する方法
追加 FlexiLayout にフィールドを追加するには、このフィールドにブロックを作成し、その検索エレメントを指定する必要があります。
文書定義のフィールドには固有の名前が必要です。これはつまり、
- フィールドの検索ロジックを記述するには、固有の名前を持つブロックを作成してください。
- 文書定義に既に存在するフィールドの検索ロジックを変更するには、同じ名前を持つブロックを作成してください。
追加 FlexiLayout にページを追加する方法
新しい画像の追加 FlexiLayout に行った変更をテストするには、ABBYY FlexiCaptureバッチを ABBYY FlexiLayout Studio の既存のインボイスプロジェクトにエクスポートします。バッチをエクスポートするには、ツール → FlexiLayout Studio へバッチのエクスポート →既存 FlexiLayout Studio プロジェクトに追加...。
- バッチABBYY FlexiCaptureのエクスポート先にできるのは、ABBYY FlexiLayout Studioのプロジェクトで、ツール → FlexiLayout Studio へバッチのエクスポート →FlexiLayout Studio プロジェクトを新規作成...。
- ABBYY FlexiLayout Studio にABBYY FlexiCaptureバッチをエクスポートすると、そのバッチに対して ABBYY FlexiLayout Studio で新しいバッチが作成されます。
- 新しい文書定義にあるフィールド数が ABBYY FlexiLayout Studio プロジェクトで使用される文書定義よりも多い場合、余分な各フィールドに関する警告がエクスポートログに表示されます。
- プログラムに余分なフィールドもエクスポートさせるには、余分なフィールドごとに、CommonBlockRegionsノード(SearchElementsツリー)に同じ名前のブロックを追加します。
文書定義からデータセットへリクエストする方法
リクエストのサンプルが DataSetRequestSample エレメントにあります。このエレメントは既定で無効になっています。
| タイプ | 説明 |
|---|---|
| NamedValue | 名前付きの値 |
| コンストラクタ | |
| NamedValue( String, String ) | |
| メソッド | |
| String Name() | 名前付きの値の名前を返します |
| String Value() | 名前付きの値の値を返します |
| NamedValueArray | 名前付きの値の配列です |
| コンストラクタ | |
| NamedValueArray() | |
| NamedValueArray( NamedValue namedValue ) | |
| メソッド | |
| Int Count() | 配列にあるエレメントの合計数を返します。 |
| NamedValue GetAt( Int 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という名前の位置を返します。 |
関数
構文:
- ABBYY FlexiLayout Studio で FlexiLayout を操作する場合は、文書定義へのパスとデータセットの名前を使ってデータセットにアクセスします。
- コンパイルされた FlexiLayout がABBYY FlexiCaptureの文書定義に追加された後は、データセットにアクセスする時にその名前だけが使用されます。
- connectionStringフォーマット:
"dbtype=FCDataset;fcTemplate="文書定義へのパス";datasetName="データセットの名前";"
注:(パスの部分はダブルバックスラッシュ "\\" で区切る必要があります)
- searchFields
値を抽出する必要がある列の名前の配列です。 - searchCriteria
列-エントリーペアの配列であり、空白の場合はすべての値を返します。 - 1 つのフィールドに複数の値が含まれているリクエストでは、またはオペレータ
- それぞれ 1 つのフィールドにのみ対応する値が複数含まれているリクエストでは、とオペレータ
- 1 つのフィールドに複数の値が含まれており、複数のフィールドに値が含まれているリクエストでは、またはを用いて1つのフィールドの複数の値を分離し、とを用いてさまざまなフィールドの値を結合します。
| 定義 | 説明 |
| Logic TestAccessToFCDataSet( String connectionString ) | データセットへのテスト接続 |
| Logic TestFCDataSetSearchCriteria( String connectionString, StringArray searchFields, NamedValueArray searchCriteria ) | データセットの検索状況のテスト |
| StringArray FieldNamesOfFCDataset( String connectionString ) | インデックス番号を昇順でソートしたデータセットから、すべてのフィールドリストを返します。 |
| StringArray FieldNamesOfFCDataset( String connectionString, StringArray searchFields ) | こちらはデータセットで指定したデータセットのフィールドのリストを昇順のインデックス番号で返します。複雑な列がある場合は、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 で渡されるフィールドの数と等しくなります(これには複雑な列の場合も含まれます)。 |
| Quality ValidateByFCDataSet( String word, String connectionString, Int fieldIndex, NamedValueArray searchCriteria, Int maxErrors, Rational maxErrorsPart, Logic ignoreSpaces = true, Int maxRecordsCount = DefaultMaxRecordsCount ); | 文字列word の品質を返します。フィールドのインデックス番号を承認します。FieldNamesOfFCDataset 関数の出力をインデックス化することでインデックス番号を取得できます。 |
| Void SearchTextFromFCDataSet( String connectionString, Int fieldIndex, NamedValueArray searchCriteria, Int maxRecordsCount = DefaultMaxRecordsCount ) | この関数は、静的テキスト関数の語を検索する条件の指定に使われます。この関数が呼び出されると、既存の検索条件は新しい条件に置き換えられます。フィールドのインデックス番号を承認します。FieldNamesOfFCDataset 関数の出力をインデックス化することでインデックス番号を取得できます。 |
| Void RegularExpressionFromFCDataSet( String connectionString, Int fieldIndex, NamedValueArray searchCriteria, Int maxRecordsCount = DefaultMaxRecordsCount ) | この関数は、CharString 関数の正規表現を使用して検索条件を指定するために使います。この関数が呼び出されると、既存の検索条件は新しい条件に置き換えられます。フィールドのインデックス番号を承認します。FieldNamesOfFCDataset 関数の出力をインデックス化することでインデックス番号を取得できます。 |
外部データベースの列からの行を画像で検索する方法
- FieldNamesOfFCDataset を使用して、昇順のインデックス番号で並べ替えた列のリストを取得します。
- データを検索する必要がある列のインデックス番号を決定します。
- データセットからのデータをフィルターする条件の配列を作成します。
- 列のインデックス番号とフィルター条件を SearchTextFromFCDataSet へ(正規表現を使用する必要がある場合は RegularExpressionFromFCDataSet へ)渡します。
認識されたバッチがエクスポートされると、このコードが自動的に生成されますABBYY FlexiCapture
外部データベースの複数の列からのエントリー用に画像を検索する方法
またSearchTextFromFCDataSet関数を呼び出すたびに検索パラメータが置き換えられるので、この関数を何度も呼び出すのは無意味です。これには回避策があります。外部データベースから文字列を取得して、次に渡します→SearchText関数。この関数を呼び出すと、文字列が置き換わる代わりに既存の検索パラメータに追加されます。
この操作を行うには、以下のステップを完了させてください:
- データを検索する列の名前の配列を作成します。
- データセットのデータをフィルターする条件の配列を作成します。
- 次の関数を使って返されるエントリーの量を決定します。RecordCountOfFCDataset関数。
- クエリデータを準備するのにPrepareRecordsetOfFCDataset関数を使用します。
- 次のメソッドを使ってすべてのレコードを確認し、各レコードの配列を取得します→RecordOfFCDatasetメソッド。
- 配列の各エレメントの値を次の関数に渡します→SearchText関数。
複雑な列を扱う場合の追加注意事項
- そのFieldNamesOfFCDataset関数は、複雑な列の名前が複数回発生する配列を返します。発生の回数は、エンコードされた外部データベースにある列インスタンスの数と同じです。
例:{VendorId, VATID, Name, Name, Name, City}。この例では、データセットの名前という複雑な 1 つの列について、外部データベースに 3 つの列が含まれています。 - もしsearchCriteria複雑な列(上記の例など)に対応するフィールド条件が SearchCriteria に含まれている場合は、この条件を使用し、これらの列のインスタンスをすべてチェックします。
- もしsearchFields複雑な列(上記の例など)に対応するフィールド条件が searchFields に含まれている場合、この結果には各列のインスタンスからの値の配列が含まれています。
たとえば、{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関数に渡します。
FlexiLayout 設定が含まれている XML ファイルへリクエストする方法
ABBYY FlexiLayout Studio のドキュメントで説明されている 2 つの標準関数を使って、FlexiLayout 設定を持つ XML ファイルへリクエストできます。
StringArray ReadFromXML(String filename,StringxPathQuery)
StringReadSingleStringFromXML(String filename,StringxPathQuery)
ABBYY FlexiLayout Studio で FlexiLayout を操作する場合、このファイルは ABBYY FlexiLayout Studio プロジェクトフォルダのサブフォルダになければなりません。このファイルへのパスは、ABBYY FlexiLayout Studio プロジェクトファイルへの相対パスです。
コンパイルされたFlexiLayoutをABBYY FlexiCaptureの文書定義に読み込み、追加のFlexiLayoutとして使用すると、XMLファイルがTemplatesフォルダに配置されて編集できるようになります。FlexiLayout が適用されると、プログラムはこのファイルへのアクセスを自動的に管理します。
12.04.2024 18:16:25