エクスポートを説明するサンプルスクリプト
エクスポート時に値を取得する
このサンプルコードはエクスポート時にどのように値を取得出来るかを説明しています。どの画像もしくはデータをエクスポートするかを指定するのに値を使用できます。文書内にそのようなフィールドがない場合、エラーが生成されます。
エクスポート用の文書構造:
Section1
Field1
…
Group1
Field2
…
…
FieldN
Section2
Field1
…
FieldK
[VBScript]
Dimfield1Value,field2Value
' セクション1内のフィールド1の値を取得する。
if Not IsNull( me.Field( "Section 1\Field1" ).Value ) then
field1Value = me.Field( "Section 1\Field1" ).Value
end if
' セクション1のフィールド2の値を取得する。
if Not IsNull( me.FIELD( "Section 1\Group1\Field2" ).Value ) then
field2Value = me.Field( "Section 1\Group1\Field2" ).Value
end if
'セクションが複数のインスタンスを持つとき、セクション1内のフィールド1の値を取得する。
if Not me.Field( "Section 1" ).Items Is Nothing then
dim curPage
for each curPage in me.Field( "Section 1" ).Items
if Not curPage.Children Is Nothing then
dim curField
for each curField in curPage.Children
if curField.Name = "Field1" And Not IsNull( curField.Value ) then
field1Value = curField.Value
exit for
end if
next
end if
next
end if
[JScript]
// セクション1内のフィールド1の値を取得
if( Field("Section 1\\Field1").Value != null ) {
var field1Value = Field("Section 1\\Field1").Value;
}
// セクション1内のグループ1のフィールド2の値を取得する
if( Field("Section 1\\Group1\\Field2").Value != null ) {
var field2Value = Field("Section 1\\Group1\\Field2").Value;
}
// セクションが複数のインスタンスを持つときにフィールド1のセクション1の値を取得する
if( Field( "Section 1" ).Items != null ) {
var i, j;
for( i = 0; i < Field( "Section 1" ).Items.Count; i++ ) {
var curPage = Field( "Section 1" ).Items.Item( i );
if( curPage.Children != null ) {
for( j = 0; j < curPage.Children.Count; j++ ) {
var curField = curPage.Children.Item( j );
if( curField.Name == "Field1" && curField.Value != null ) {
var field1Value = curField.Value;
break;
}
}
}
}
}
エクスポートページ画像
この例のコードは、必要なファイル形式、カラースキーム及び解像度を使用して、すべての文書ページから画像をどのようにエクスポートするかを説明しています。画像はページ毎に保存されます。例:異なるファイルのそれぞれのページ。
この例のファイルは "page1.tif,"や"page2.tif,"といった名前がつけられています。もし必要であればファイルネーミングメカニズムを変更できます。例えば、フィールドの値に基づきファイルネームをつけるといった具合です。
[VBScript]
dim fso, folderName
set fso = CreateObject("Scripting.FileSystemObject")
folderName = "d:\ExportImages"
if Not fso.FolderExists( folderName ) then
fso.CreateFolder folderName
end if
dim imageOptions
set imageOptions = FCTools.NewImageSavingOptions
imageOptions.Format = "tif"
imageOptions.ColorType = "BlackAndWhite"
imageOptions.Resolution = 600
dim i
for i = 0 to me.Pages.Count - 1
dim fileName
' 指定されたフォーマットの拡張子がつけられた名前をファイルにつける
fileName = fso.BuildPath( folderName, "page" & (i+1) & ".tif" )
me.Pages.Item(i).SaveAs fileName, imageOptions
next
[JScript]
var fso = new ActiveXObject("Scripting.FileSystemObject");
var folderName = "d:\\ExportImages";
if( !fso.FolderExists( folderName ) ) {
fso.CreateFolder( folderName );
}
var imageOptions = FCTools.NewImageSavingOptions();
imageOptions.Format = "tif";
imageOptions.ColorType = "BlackAndWhite";
imageOptions.Resolution = 600;
var i;
for( i = 0; i < Pages.Count; i++ ) {
// 指定されたフォーマットの拡張子がつけられた名前をファイルにつける
var fileName = fso.BuildPath( folderName, "page" + (i+1) + ".tif" );
Pages.Item(i).SaveAs( fileName, imageOptions );
}
テーブルのエクスポート
この例はテーブルの*.txtファイルへのエクスポートを説明しています。
[VBScript]
dim fso, txtFile, fileName
set fso = CreateObject("Scripting.FileSystemObject")
fileName = "d:\TestExportTable.txt"
set txtFile = fso.CreateTextFile( fileName, true )
txtFile.WriteLine "Table"
dim table, row, cell, rowNumber
set table = me.Field("Page 1\Table")
rowNumber = 1
for each row in table.Items
txtFile.WriteLine "RowNumber = " & rowNumber
for each cell in row.Children
txtFile.Write cell.Value & " "
next
txtFile.WriteBlankLines 1
rowNumber = rowNumber + 1
next
txtFile.Close
set txtFile = nothing
set fso = nothing
[JScript]
var fso, txtFile, fileName;
fso = new ActiveXObject("Scripting.FileSystemObject");
fileName = "d:\\TestExportTable1.txt";
txtFile = fso.CreateTextFile( fileName, true );
txtFile.WriteLine( "Table" );
var table, i, j;
table = Field("Page 1\\Table");
var rows = table.Items;
for( i = 0; i < rows.Count; i++ ) {
txtFile.WriteLine( "RowNumber = " + ( i+1 ) );
var cells = rows.Item(i).Children;
for( j = 0; j < cells.Count; j++ ) {
txtFile.Write( cells.Item(j).Value + " " );
}
txtFile.WriteBlankLines(1);
}
txtFile.Close();
すべての階層から文書をエクスポートする
この例は、グローバルエクスポートモジュールのカスタム機能を使用して、すべての階層の文書のフィールドをどのようにエクスポートするかを説明しています。様々な保存場所から文書フィールドをエクスポートする必要がある場合、外部のCOMコンポーネントを使用するのをオススメします(次の例をご覧ください)
コアエクスポートコード
[VBScript]
Export.ExportDocument me, FCTools
[JScript]
Export.ExportDocument( this, FCTools );
グローバルエクスポートモジュールの機能コード
[VBScript]
' このプロシージャがエクスポートを実行します。エクスポート用のファイルを作成し、
' ページを画像に変換して保存し、ドキュメントフィールドのテキストファイルと、
' ドキュメント全体の情報も同時に保存します。
Sub ExportDocument(ByRef docObj, ByRef FCTools)
Dim folderName
Dim txtFile, fileName
Dim fso
On Error Resume Next
set fso = CreateObject("Scripting.FileSystemObject")
' エクスポート用のフォルダを作成
folderName = CreateExportFolder(docObj.DefinitionName, fso)
if Err.Number <> 0 then
docObj.Action.Succeeded = false
docObj.Action.ErrorMessage = "エクスポートフォルダを作成時にエラーが発生しました:" + Err.Description
Err.Clear
Exit Subub
End if
' 画像をエクスポート
ExportImages docObj, FCTools, folderName, fso
if Err.Number <> 0 then
docObj.Action.Succeeded = false
docObj.Action.ErrorMessage = "画像をエクスポート時にエラーが発生しました:" + Err.Description
Err.Clear
Exit Sub
End if
' テキストファイルを作成
fileName = fso.BuildPath(folderName, "doc.txt")
Set txtFile = fso.CreateTextFile(fileName, True)
' 文書に関する情報をエクスポート
ExportDocInfo docObj, txtFile
' フィールドをエクスポート
txtFile.WriteLine "フィールド:"
ExportFields docObj.Children, txtFile, ""
txtFile.Close
if Err.Number <> 0 then
docObj.Action.Succeeded = false
docObj.Action.ErrorMessage = "データをエクスポート時にエラーが発生しました:" + Err.Description
Err.Clear
Exit Sub
End if
Set txtFile = Nothing
Set fso = Nothing
End Sub
' 画像をエクスポートする関数
Function ExportImages( ByRef docObj, ByRef FCTools, ByVal exportFolder, ByRef fso )
Dim pages, page, imageOptions
Dim fileName, pageNum
' エクスポートの設定を明記する
Set imageOptions = FCTools.NewImageSavingOptions
imageOptions.Format = "bmp"
imageOptions.ColorType = "FullColor"
imageOptions.Resolution = 100
' ページ毎のエクスポート
Set pages = docObj.Pages
pageNum = 1
For Each page In pageses
fileName = fso.BuildPath(exportFolder, "page" & pageNum & ".bmp")
page.SaveAs fileName, imageOptions
pageNum = pageNum + 1
Next
End Function
' ドキュメントの情報をエクスポートする処理
txtFile.WriteLine "Doc info:"
txtFile.WriteLine ("DocumentId " & docObj.Id)
txtFile.WriteLine ("IsAssembled " & docObj.IsAssembled)
txtFile.WriteLine ("IsVerified " & docObj.IsVerified)
txtFile.WriteLine ("IsExported " & docObj.IsExported)
txtFile.WriteLine ("ProcessingErrors " & docObj.ProcessingErrors)
txtFile.WriteLine ("ProcessingWarnings " & docObj.ProcessingWarnings)
txtFile.WriteLine ("TotalSymbolsCount " & docObj.TotalSymbolsCount)
txtFile.WriteLine ("RecognizedSymbolsCount " & docObj.RecognizedSymbolsCount)
txtFile.WriteLine ("UncertainSymbolsCount " & docObj.UncertainSymbolsCount)
txtFile.WriteLine
End Sub
' フィールドコレクションからフィールドをエクスポートする処理
Sub ExportFields(ByRef fields, ByRef txtFile, ByVal indent)
Dim curField
For Each curField In fields
ExportField curField, txtFile, indent
Next
End Sub
' フィールドがnullかどうかチェックする。
' フィールドの値がinvalidである場合
' (nullかどうかチェックする場合でも)いかなるアクセスを試みてもexceptionが発生する。
Function IsNullFieldValue( ByRef field )
on error resume next
IsNullFieldValue = IsNull( field.Value )
if Err.Number <> 0 then
IsNullFieldValue = True
Err.Clear
End if
End Function
' フィールドをエクスポートする手順
Sub ExportField(ByRef field, ByRef txtFile, ByVal indent)
' フィールド名を保存
txtFile.Write (indent & field.Name)
' 値がアクセスできる場合はフィールドの値を保存する。
If IsNullFieldValue(field) Then
txtFile.WriteLine
Else
txtFile.WriteLine (" " & field.Text)
End If
If Not field.Children Is Nothing Then
' 子フィールドをエクスポートする
ExportFields field.Children, txtFile, indent & " "
ElseIf Not field.Items Is Nothing Then
' フィールドインスタンスをエクスポート
ExportFields field.Items, txtFile, indent & " "
End If
End Sub
' この関数はエクスポート用のフォルダを作成し、ファイルのpathを返す。
Function CreateExportFolder(ByVal definitionName, ByRef fso)
Dim docFolder, folderName
' メインフォルダー
exportFolder = "d:\ScriptExport"
If fso.FolderExists(exportFolder) = False Then
fso.CreateFolder (exportFolder)
End If
' 文書定義のフォルダー
docFolder = fso.BuildPath(exportFolder, definitionName)
If fso.FolderExists(docFolder) = False Then
fso.CreateFolder (docFolder)
End If
' エクスポートされたドキュメントのフォルダー
Dim i
i = 1
folderName = fso.BuildPath(docFolder, i)
While fso.FolderExists(folderName)
i = i + 1
folderName = fso.BuildPath(docFolder, i)
Wend
fso.CreateFolder (folderName)
CreateExportFolder = folderName
End Function
[JScript]
// この関数はエクスポートを実行します。エクスポート用のフォルダを作成し、
// 画像ファイル、ドキュメントフィールドの内容のテキストファイル、
// そしてドキュメントの情報をそこに保存します。
function ExportDocument(docObj, exportImageTools)
{
var folderName
var txtFile, fileName
var fso
fso = new ActiveXObject("Scripting.FileSystemObject");
// エクスポート用のフォルダを作成
try {
folderName = CreateExportFolder(docObj.DefinitionName, fso);
} catch( e ) {
docObj.Action.Succeeded = false;
docObj.Action.ErrorMessage = "エクスポートフォルダを作成時にエラーが発生しました:" + e.description;
return;n;
}
// 画像をエクスポート
try {
ExportImages(docObj, exportImageTools, folderName, fso);
} catch( e ) {
docObj.Action.Succeeded = false;
docObj.Action.ErrorMessage = "画像をエクスポート時にエラーが発生しました:" + e.description;
return;
}
// テキストファイルを作成
fileName = fso.BuildPath(folderName, "doc.txt");
txtFile = fso.CreateTextFile(fileName, true);
// ドキュメントの情報をエクスポート
ExportDocInfo( docObj, txtFile );
// フィールドをエクスポート
txtFile.WriteLine( "Fields:" );
try {
ExportFields( docObj.Children, txtFile, "" );
} catch( e ) { {
docObj.Action.Succeeded = false;
docObj.Action.ErrorMessage = "データをエクスポート時にエラーが発生しました:" + e.description;
txtFile.Close();
return;
}
txtFile.Close();
txtFile = 0;
fso = 0;
}
// 画像エクスポート関数画像をエクスポートしているときにエラーが発生した場合、
// エラーメッセージを返す、そうでない場合は空のstringを返す
function ExportImages( docObj, exportImageTools, exportFolder, fso )
{
// エクスポート設定を明記
var imageOptions = exportImageTools.NewImageSavingOptions();
imageOptions.Format = "bmp";
imageOptions.ColorType = "FullColor";
imageOptions.Resolution = 100;
// ページ毎のエクスポート
var pages = docObj.Pages;
var i
for( i = 0; i < pages.Count; i++ ) {
var fileName = fso.BuildPath( exportFolder, "page" + (i+1) + ".bmp" );
pages.Item(i).SaveAs( fileName, imageOptions );
}
}
// 文書情報をエクスポートする手順
function ExportDocInfo(docObj, txtFile)
{
txtFile.WriteLine( "Doc info:" );
txtFile.WriteLine("IsAssembled " + docObj.IsAssembled);
txtFile.WriteLine("IsVerified " + docObj.IsVerified);
txtFile.WriteLine("IsExported " + docObj.IsExported);
txtFile.WriteLine("ProcessingErrors " + docObj.ProcessingErrors);
txtFile.WriteLine("ProcessingWarnings " + docObj.ProcessingWarnings);
txtFile.WriteLine("TotalSymbolsCount " + docObj.TotalSymbolsCount);
txtFile.WriteLine("RecognizedSymbolsCount " + docObj.RecognizedSymbolsCount);
txtFile.WriteLine("UncertainSymbolsCount " + docObj.UncertainSymbolsCount);
txtFile.WriteLine();
}
// フィールド群からフィールドをエクスポートする手順
function ExportFields(fields, txtFile, indent)
{
var i
for( i = 0; i < fields.Count; i++ ) {
ExportField( fields.Item(i), txtFile, indent );
}
}
// フィールドの値がnullかどうかチェック。
// フィールドの値がinvalidだった場合
// (フィールドの値をチェックする場合でも)いかなるアクセスもexceptionを発生させる。
function IsNullFieldValue( field )
{
try {
return ( field.Value == null );
} catch( e ) {
return true;
}
}
// フィールドをエクスポートする手順
function ExportField(field, txtFile, indent)
{
// ファイル名を保存する
txtFile.Write(indent + field.Name);
// 値がアクセスできる場合はフィールドの値を保存する。
if( IsNullFieldValue( field ) ) {
txtFile.WriteLine();
} else {
txtFile.WriteLine(" " + field.Text);
} }
if( field.Children != null ) {
// 子フィールドをエクスポート
ExportFields( field.Children, txtFile, indent + " " );
} else if( field.Items != null ) {
// フィールドインスタンスをエクスポート
ExportFields( field.Items, txtFile, indent + " " );
}
}
// この関数はエクスポート用のフォルダを作成し、ファイルのpathを返す
function CreateExportFolder(definitionName, fso)
{
var docFolder, folderName
// メインフォルダー
var exportFolder = "d:\\ScriptExport";
if( !fso.FolderExists(exportFolder) ) {
fso.CreateFolder (exportFolder);
} }
// 文書定義のフォルダ
docFolder = fso.BuildPath(exportFolder, definitionName);
if( !fso.FolderExists(docFolder) ) {
fso.CreateFolder(docFolder);
}
// エクスポートされたドキュメントのフォルダー
var i = 1;
folderName = fso.BuildPath(docFolder, i);
while( fso.FolderExists(folderName) ) {
i++;
folderName = fso.BuildPath(docFolder, i);
}
fso.CreateFolder(folderName);
return folderName;
}
外部のCOMコンポーネントを使用する
[VBScript]
dim autoExport
set autoExport = CreateObject( "AutomationExport.Exporter" )
autoExport.Export me, FCTools
[JScript]
var autoExport = new ActiveXObject("AutomationExport.Exporter");
autoExport.Export( this, FCTools );
VisualBasicのActiveXコンポーネントコード
以下はAutomationExportプロジェクトからのExporterクラスコードです。上記のスクリプトで使用されています。
OptionExplicit
Dim mFso AsNew Scripting.FileSystemObject
' このプロシージャがエクスポートを実行する: エクスポート用のファイルを作成して
' 画像ファイル、文書フィールドの内容のテキストファイル、
' 文書に関する情報を保存する
PublicSub Export(ByRef docObj As Object, ByRef FCTools As Object)
OnErrorGoTo err_h
Dim folderName AsString
Dim txtFile As TextStream, fileName AsString
Dim imageExportResult AsString, errMessage AsString
' 文書に関する情報を保存する
folderName = createExportFolder(docObj.definitionName)
If folderName = "" Then
docObj.Action.Succeeded = False
docObj.Action.ErrorMessage = "エクスポートフォルダを作成できない"
ExitSub
EndIf
' 画像をエクスポート
imageExportResult = exportImages(docObj, FCTools, folderName)
' テキストファイルを作成
fileName = mFso.BuildPath(folderName, "doc.txt")
Set txtFile = mFso.CreateTextFile(fileName, True)
' 画像のエクスポートの問題に関する情報を保存する
If imageExportResult <> "" Then
txtFile.WriteLine imageExportResult
errMessage = errMessage & imageExportResult
EndIf
' フィールドをエクスポート
exportDocInfo docObj, txtFile
' フィールドをエクスポートする
txtFile.WriteLine "フィールド:"
IfNot exportFields(docObj.Children, txtFile, "") Then
errMessage = errMessage & " データをエクスポート中にエラーが発生した"
EndIf
txtFile.Close
' エクスポート中にエラーが発生した場合はをリセットする
' 成功フラグをFalseにエクスポートする
If errMessage <> "" Then
docObj.Action.Succeeded = False
docObj.Action.ErrorMessage = errMessage
EndIf
Set txtFile = Nothing
Set mFso = Nothing
ExitSub
err_h:
docObj.Action.Succeeded = False
docObj.Action.ErrorMessage = Err.Description
txtFile.Close
Set mFso = Nothing
EndSub
' 画像エクスポート機能。画像をエクスポートしているときにエラーが発生した場合、
' エラーセージを返す、そうでない場合は空の文字列を返す
PrivateFunction exportImages(ByRef docObj As Object, ByRef FCTools As Object, _
ByVal exportFolder AsString) AsString
OnErrorGoTo err_h
Dim pages As Object, page As Object, imageOptions As Object
Dim fileName AsString, pageNum AsLong
exportImages = ""
' エクスポートの設定を明記する
Set imageOptions = FCTools.NewImageSavingOptions
imageOptions.Format = "png"
imageOptions.ColorType = "GrayScale"
imageOptions.Resolution = 300
' ページ毎のエクスポート
Set pages = docObj.pages
pageNum = 1
ForEach page In pages
fileName = mFso.BuildPath(exportFolder, page.definitionName + "_page" & pageNum & "." & imageOptions.Format)
page.SaveAs fileName, imageOptions
pageNum = pageNum + 1
Next page
ExitFunction
err_h:
exportImages = Err.Description
EndFunction
' ドキュメントの情報をエクスポートする処理
PrivateSub exportDocInfo(ByRef docObj As Object, ByRef txtFile As TextStream)
OnErrorGoTo err_h
txtFile.WriteLine "Doc info:"
txtFile.WriteLine ("DocumentId " & docObj.Id)
txtFile.WriteLine ("IsAssembled " & docObj.IsAssembled)
txtFile.WriteLine ("IsVerified " & docObj.IsVerified)
txtFile.WriteLine ("IsExported " & docObj.IsExported)
txtFile.WriteLine ("ProcessingErrors " & docObj.ProcessingErrors)
txtFile.WriteLine ("ProcessingWarnings " & docObj.ProcessingWarnings)
txtFile.WriteLine ("TotalSymbolsCount " & docObj.TotalSymbolsCount)
txtFile.WriteLine ("RecognizedSymbolsCount " & docObj.RecognizedSymbolsCount)
txtFile.WriteLine ("UncertainSymbolsCount " & docObj.UncertainSymbolsCount)
txtFile.WriteLine
ExitSub
err_h:
txtFile.WriteLine Err.Description
EndSub
' フィールドコレクションからフィールドをエクスポートする処理
PrivateFunction exportFields(ByRef fields As Object, ByRef txtFile As TextStream, ByVal indent As String) AsBoolean
OnErrorGoTo err_h
Dim curField As Object
exportFields = True
ForEach curField In fields
IfNot exportField(curField, txtFile, indent) Then
exportFields = False
EndIf
Next curField
ExitFunction
err_h:
txtFile.WriteLine Err.Description
exportFields = False
EndFunction
' フィールドの値がnullかどうかチェックする。
' もしフィールドの値がinvalidであった場合は、
' (nullかどうかチェックする場合でも)いかなるアクセスを試みてもexceptionが発生する。
Function IsNullFieldValue(ByRef field As Object) AsBoolean
OnErrorGoTo err_h
IsNullFieldValue = IsNull(field.Value)
ExitFunction
err_h:
IsNullFieldValue = True
EndFunction
' フィールドをエクスポートする機能。
PrivateFunction exportField(ByRef field As Object, ByRef txtFile As TextStream, _
ByVal indent AsString) AsBoolean
OnErrorGoTo err_h
Dim result AsBoolean
result = True
' フィールド名を保存
txtFile.Write (indent & field.Name)
' 値がアクセスできる場合はフィールドの値を保存する。
IfNot IsNullFieldValue(field) Then
txtFile.WriteLine (" " & field.Value)
Else
txtFile.WriteLine
EndIf
IfNot field.Children Is NothingThen
' 子フィールドをエクスポートする
result = result And exportFields(field.Children, txtFile, indent & " ")
ElseIfNot field.Items IsNothingThen
' フィールドインスタンスをエクスポート
result = result And exportFields(field.Items, txtFile, indent & " ")
EndIf
exportField = result
ExitFunction
err_h:
txtFile.WriteLine Err.Description
exportField = False
EndFunction
' この関数はエクスポート用のフォルダを作成し、ファイルのpathを返す。
PrivateFunction createExportFolder(ByVal definitionName AsString) AsString
OnErrorGoTo err_h
Dim docFolder AsString, folderName AsString
' メインフォルダー
Const exportFolder = "d:\AutomationExport"
If mFso.FolderExists(exportFolder) = FalseThen
mFso.CreateFolder (exportFolder)
EndIf
' 文書定義のフォルダ
docFolder = mFso.BuildPath(exportFolder, definitionName)
If mFso.FolderExists(docFolder) = FalseThen
mFso.CreateFolder (docFolder)
EndIf
' エクスポートされたドキュメントのフォルダー
Dim i AsLong
i = 1
folderName = mFso.BuildPath(docFolder, i)
While mFso.FolderExists(folderName)
i = i + 1
folderName = mFso.BuildPath(docFolder, i)
Wend
mFso.CreateFolder (folderName)
createExportFolder = folderName
ExitFunction
err_h:
createExportFolder = ""
EndFunction
.Net( C# )言語で書かれた外部コンポーネントを使用する
.Netで書かれた外部コンポーネントを使用する場合は、以下の手順を踏んでください:
- ClassLibraryタイプのプロジェクトを作成する
- ControllerInterop.dllをReferenceリスト内に表示されるABBYY.FlexiCaptureプロジェクトのReferenceに追加してください。 スクリプトオブジェクトの全てのインターフェイスはプロジェクトで使用可能になります。
- DISPインターフェイスおよびインターフェイスを実装するクラス、またProgldも同様に定義してください(これによりスクリプトコードのActiveXとの場合と同様に、.Netコンポーネント、を使用して作業をすることができるようになります)。
- プロジェクトの作成後、生成されたライブラリタイプを登録してください(プロジェクトプロパティにて一致するオプションを有効にすることで、自動で行われます)。
- エクスポートコードから標準手順のコンポーネントメソッドを呼び出すことができます:
[VBScript]
dim autoExport
set autoExport = CreateObject( "ExportLibrary1.Export" )
autoExport.ExportDocument me, FCTools
[JScript]
var autoExport = new ActiveXObject("ExportLibrary1.Export"); autoExport.ExportDocument( this, FCTools );
そのようなコンポーネントのコードは以下のようなものです:
using System;
using System.Runtime.InteropServices;
using System.IO;
using ABBYY.FlexiCapture;
namespace ExportLibrary1
{
// スクリプトからアクセスできるエクスポート機能のインターフェイスは
// 新しいコンポーネントを生成する場合あたらしいGUIDを作り出します。
[Guid("32B10C3B-EEA3-4194-B0A0-E358C310225A")]
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface _cExport
{
[DispId(1)]
void ExportDocument(ref IExportDocument DocRef, ref FCTools Tools);
}
// このクラスはエクスポートコンポーネント関数を実行し、
// 新しいコンポーネントを生成する場合あたらしいGUIDを作り出します。
// またあなたのProgIdをセットします。
[Guid("3BA19BD7-C6DC-4f63-BC08-0D95254DADC3")]
[ClassInterface(ClassInterfaceType.None)]
[ProgId("ExportLibrary1.Export")]
[ComVisible(true)]
public class Export : _cExport
{
public Export()
{
}
// ドキュメントをエクスポートする関数。フォルダーを作成し、
// その中に画像ファイルを保存、
// ドキュメントフィールドをテキストファイル化し、ドキュメント全体の情報を保存する。
public void ExportDocument( ref IExportDocument docRef, ref FCTools FCTools )
{
try
{
string exportFolder = createExportFolder( docRef.DefinitionName );
exportImages( docRef, FCTools, exportFolder );
// テキストファイルを作成
string fileName = exportFolder + "//" + "doc.txt";
StreamWriter sw = File.CreateText( fileName );
// 文書の情報をエクスポート
exportDocInfo( docRef, sw );
// フィールドをエクスポート
sw.WriteLine( "Fields:" );
exportFields( docRef.Children, sw, "" );
sw.Close();
}
catch( Exception e )
{
docRef.Action.Succeeded = false;
docRef.Action.ErrorMessage = e.ToString();
}
}
// この関数はエクスポート用フォルダを作成し、そのフォルダへのpathを返す。
privatestring createExportFolder(string definitionName )
{
string docFolder, folderName;
// メインフォルダー
string exportFolder = "d:\\DotNetExport";
if( !Directory.Exists(exportFolder) )
{
Directory.CreateDirectory(exportFolder);
}
// 文書定義のフォルダー
docFolder = exportFolder + "\\" + definitionName;
if( !Directory.Exists(docFolder) )
{
Directory.CreateDirectory( docFolder );
}
// エクスポートされたドキュメントのフォルダー
int i = 1;
folderName = docFolder + "\\" + i;
while( Directory.Exists(folderName) )
{
i++;
folderName = docFolder + "\\" + i;
}
Directory.CreateDirectory(folderName);
return folderName;
}
// 画像エクスポート関数
private void exportImages( IExportDocument docRef, FCTools FCTools, string exportFolder )
{
string baseFileName = exportFolder + "\\page_";
IExportImageSavingOptions imageOptions = FCTools.NewImageSavingOptions();
imageOptions.Format = "bmp";
imageOptions.ColorType = "FullColor";
imageOptions.Resolution = 100;
int i = 1;
foreach( IExportPage curPage in docRef.Pages )
{
string fileName = baseFileName + i + ".bmp";
curPage.SaveAs( fileName, imageOptions );
i++;
}
}
// 文書の情報をエクスポート
private void exportDocInfo( IExportDocument docRef, StreamWriter sw )
{
sw.WriteLine( "Doc info:" );
sw.WriteLine("DocumentId " + docRef.Id );
sw.WriteLine("IsAssembled " + docRef.IsAssembled);
sw.WriteLine("IsVerified " + docRef.IsVerified);
sw.WriteLine("IsExported " + docRef.IsExported);
sw.WriteLine("ProcessingErrors " + docRef.ProcessingErrors);
sw.WriteLine("ProcessingWarnings " + docRef.ProcessingWarnings);
sw.WriteLine("TotalSymbolsCount " + docRef.TotalSymbolsCount);
sw.WriteLine("RecognizedSymbolsCount " + docRef.RecognizedSymbolsCount);
sw.WriteLine("UncertainSymbolsCount " + docRef.UncertainSymbolsCount);
sw.WriteLine();
}
// フィールドコレクションをエクスポート
private void exportFields( IExportFields fields, StreamWriter sw, string indent )
{
foreach( IExportField curField in fields )
{
exportField( curField, sw, indent );
}
}
// フィールドの値がnullかどうかチェック。
// フィールドの値がinvalidだった場合
// (フィールドの値をチェックする場合でも)いかなるアクセスもexceptionを発生させる。
privatebool IsNullFieldValue( IExportField field )
{
try
{
return ( field.Value == null );
}
catch( Exception e )
{
returntrue;
}
}
// 指定したフィールドをエクスポートする
private void exportField( IExportField field, StreamWriter sw, string indent )
{
// フィールド名を保存
sw.Write( indent + field.Name );
// アクセス可能な場合はフィールドの値を保存
if( IsNullFieldValue( field ) )
{
sw.WriteLine();
}
else
{
sw.WriteLine( " " + field.Text );
}
if( field.Children != null )
{
// 子フィールドをエクスポート
exportFields( field.Children, sw, indent + " " );
}
else if( field.Items != null )
{
// フィールドインスタンスをエクスポート
exportFields( field.Items, sw, indent + " " );
}
}
}
}
Export handler
このサンプルコードはエクスポートされる文書の情報を保存する単純なエクスポート、及びテキストファイルへのエクスポート結果を実演しています。2つのテキストファイルがこの例で使用されています:ひとつはエクスポートに成功した文書リスト、もうひとつはエクスポート中にエラーが発生した文書リストです。
[VBScript]
dim curDoc
dim fso, fileErrorName, txtErrorFile, fileSucceedName, txtSucceedFile
set fso = CreateObject("Scripting.FileSystemObject")
' 失敗したドキュメントをファイル化する
fileErrorName = "d:\ExportResults\ErrorsDocuments.txt"
set txtErrorFile = fso.CreateTextFile( fileErrorName, true )
' エクスポートに成功したドキュメントをファイル化する。
fileSucceedName = "d:\ExportResults\SucceedDocuments.txt"
set txtSucceedFile = fso.CreateTextFile( fileSucceedName, true )
dim i, exprortResult, docInfo
' エクスポートされたコレクションをは反復処理する。
for i = 0 Tome.Count - 1
set exportResult = me.Item(i)
docInfo = "DocumentId:" & exportResult.Document.Id
if exportResult.Succeeded then
docInfo = docInfo & " - 正常にエクスポートされた。"
txtSucceedFile.WriteLine docInfo
else
docInfo = docInfo & " - エクスポートエラー:" & exportResult.ErrorMessage
txtErrorFile.WriteLine docInfo
endif
next
txtErrorFile.Close
txtSucceedFile.Close
[JScript]
var fso = new ActiveXObject("Scripting.FileSystemObject");
// 失敗したドキュメントをファイル化する。
var fileErrorName = "d:\\ExportResults\\ErrorsDocuments.txt";
var txtErrorFile = fso.CreateTextFile( fileErrorName, true );
// エクスポートに成功したドキュメントをファイル化する。
var fileSucceedName = "d:\\ExportResults\\SucceedDocuments.txt"
var txtSucceedFile = fso.CreateTextFile( fileSucceedName, true );
var i
// エクスポートしたドキュメントのコレクションを反復処理する。
for( i = 0; i < Documents.Count; i++ ) {
var curDoc = Documents.Item( i );
var docInfo = "DocumentId: " + curDoc.Id;
if( curDoc.Action.Succeeded ) {
docInfo = docInfo + "。正常にエクスポートされました。結果:" + curDoc.Action.Result;
txtSucceedFile.WriteLine( docInfo );
} else {
docInfo = docInfo + "。正常にエクスポートされた。結果:" + curDoc.Action.ErrorMessage + " 結果:" + curDoc.Action.Result;
txtErrorFile.WriteLine( docInfo );
}
}
txtErrorFile.Close();
txtSucceedFile.Close();
共通オフィス形式のソースファイルへのアクセス
このサンプルスクリプトは文書をエクスポートする際にどのようにソースファイルを保存するかを示しています。ソースファイルはサポートされる共通オフィス形式である必要があり、ファイル名の競合を避けるためにユニークなファイル名である必要があります。
using System;
using System.IO;
using System.Collections.Generic;;
// ページを通しで反復処理する。
for( int i = 0; i<Document.Pages.Count; i++ ) {
IPage page = Document.Pages[i];
// ソースファイルがあるかチェックする。
if( page.SourceFileGUID == "" ) {
continue;
}
// ファイルの元の名前
string sourceFileName = @"";
// 元の名前を明記すること
if( page.ImageSourceType == @"File" ) {
sourceFileName = Path.GetFileName( page.ImageSource );
} else if( page.ImageSourceType == @"Scanner" || page.ImageSourceType == @"Custom" ) {
sourceFileName = Path.GetFileName( page.ImageSourceFileSubPath );
}
// ファイル名から拡張子を削除
if( sourceFileName != @"" ) {
sourceFileName = Path.GetFileNameWithoutExtension( sourceFileName ) + @".";
}
// 固有のソースファイル名(元の名前+GUID)
string sourceFileUniqueName = sourceFileName + page.SourceFileGUID;
// ソースファイルが保存されるフォルダのpath
string sourceFilePath = Document.Batch.Project.ExportRootPath + @"\" + sourceFileUniqueName;
// そのファイルが存在していないことをあらかじめ確認すること。
if( File.Exists( sourceFilePath ) ) {
continue;
}
// ファイルを保存。
Processing.ReportMessage( "ソースファイルを保存: " + sourceFileUniqueName );
page.SaveSourceFile( sourceFilePath );
}
12.04.2024 18:16:06