質問
ファイル名が分かった時点でどの文書定義を割り当てるかが分かっている場合があるかもしれません。
その場合は、そのファイル名を使って、文書定義を強制的に割り当てることが可能ですか。
回答
ファイル名を使って、文書定義を強制的に割り当てる方法の1例をご紹介します。
条件:
同一 Batch 内で 入力する画像の内容に関わらず、ファイル名のみで自動的に意図した文書定義をわりあてます。
ご注意
- この方法は、半構造化文書、つまりFlexiLayoutが用いられていることが必須条件となります。
- FlexiLayoutはどのような内容でも構いません。
下図のような文書定義をもつ 文書定義 Project があるとします。
次のようにファイル名だけで、文書定義を割り当てたいとします。
インポートするファイル名 | ファイル名だけで一致させたい文書定義 |
InvoiceSample01.pdf | InvoiceSample01 |
InvoiceSample02.pdf | InvoiceSample02 |
InvoiceSample03.pdf | InvoiceSample03 |
各文書定義は同じ内容*です。ただ、全てFlexiLayoutを適用*しています。
*実際にこの方法を使う場合は、異なる文書定義でも、使用できます。ただ、FlexiLayoutは必ず設定されている必要があります。
メニューの「プロジェクト」 > 「プロジェクトプロパティ」から...
「イベントハンドラ」タブの「照合前」イベント > [スクリプトの編集] を開き、
下図のようなスクリプトを記述します。(例はC# .NET)
// C# .NET スクリプト
using System;
for( int i=0 ; i < Document.Pages.Count ; i++ ){
// Full FileName
string imageSourceFileSubPath = Document.Pages[PageIndex].ImageSourceFileSubPath;
// Detect Extension
int index = imageSourceFileSubPath.LastIndexOf(".");
string inputFileName = "";
if( index!=-1 )
{
inputFileName = imageSourceFileSubPath;
// Get FileName
inputFileName = imageSourceFileSubPath.Substring( 0, index );
}
try{
if( inputFileName=="InvoiceSample01" )
{
Matching.DefinitionsList = "InvoiceSample01\\Document Section 1";
Matching.ForceMatch = true;
}
else if( inputFileName=="InvoiceSample02" )
{
Matching.DefinitionsList = "InvoiceSample02\\Document Section 1";
Matching.ForceMatch = true;
}
else if( inputFileName=="InvoiceSample03" )
{
Matching.DefinitionsList = "InvoiceSample03\\Document Section 1";
Matching.ForceMatch = true;
}
}
catch( Exception e )
{
//System.Windows.Forms.MessageBox.Show("e: " + e );
}
}
上のスクリプトで重要な FlexiCapture 独自のオブジェクトなどについては、下記を参照ください。
上図の設定を行うと、文書定義、FlexiLayoutの内容に関わらず、ファイル名だけで、文書には強制的に指定した文書定義が割り当てられます。
実際、全く同じ内容の文書定義だが、それぞれ、別の文書定義がファイル名を元に割り当てられる:
(異なる文書定義でも可能。ただし、FlexiLayoutの設定が必須)
詳しくは下のリンクからご入手できるサンプルプロジェクトをご覧ください。
*ご覧になるには、バージョン12.0.2.3118以上の FlexiCaptureが必要です。
コメント
0件のコメント
サインインしてコメントを残してください。