.NETスクリプトでコードを再使用する
各スクリプトは独立したコードフラグメントとしてワークフローに保存されます。.NET言語をサポートしていなかった旧版では、既存のコードを再使用したいユーザーは機能定義をそれぞれ、新しいスクリプトにコピーしなければなりませんでした。
.NETサポートが加わったため、コンパイルされた.NETアセンブリとしてスクリプトコードを記述および配布できます。既存のコードを再使用するには .NETアセンブリから必要なメソッドを呼び出すようワークフローを設定するだけです。
以下は、.NETアセンブリをVisual Studioで作成する方法の例です:
- 新しいタイプクラスライブラリのC#プロジェクトを作成して、FineReaderServer.UserScriptsと名付けます。
- このアセンブリに参照を追加します:C:\Program Files\ABBYY FineReader Server 14.0\Bin\FRS.ScriptingObjects.Interop.dll
- UserScripts.csと言う名前の新しいファイルを以下のコードが含まれるプロジェクトに追加します:
using System.IO;
using System.Linq;
using FineReaderServer.ScriptingObjects.Interop;
namespace FineReaderServer.UserScripts
{
public static class Utils
{
public static string Join(string separator, IStringsCollection collection)
{
return string.Join(separator, collection.Cast<string>());
}
}
public static class Extensions
{
public static string GetStringValue(this IAttribute attr)
{
switch(attr.Type)
{
case DocumentAttributeType.DAT_MultipleLines:
return Utils.Join(", ", attr.Value);
case DocumentAttributeType.DAT_DateTime:
return attr.Value.ToString("s");
default:
return attr.Value.ToString();
}
}
}
public static class DocumentAttributes
{
public static void SaveToFile(string path, IAttributes attributes)
{
using(var writer = File.CreateText(path))
{
foreach(IAttribute attribute in attributes)
{
writer.WriteLine(string.Format("{0}: {1}", attribute.Name, attribute.GetStringValue()));
}
}
}
}
}
- プロジェクトをコンパイルし、その結果のアセンブリへの参照をConfiguration.xml ファイルに追加します。
- 新しいワークフローを作成し、そのワークフローでドキュメントタイプを設定します。
- エクスポートスクリプトを以下のように指定します:
var format = doc.OutputFormats[0];
var outputFile = format.OutputFiles[0];
var attributesFile = System.IO.Path.Combine(format.OutputLocation, outputFile +".attributes.txt");
FineReaderServer.UserScripts.DocumentAttributes.SaveToFile(attributesFile, doc.Attributes);
- 処理するドキュメントを送信します。
- ドキュメントがインデックスステーションに到着するまで待機して、そのタイプとインデックスフィールドの値を指定し、Acceptをクリックします。その結果、ドキュメントはdocument.pdf.attributes.txtと言う名前のファイルと一緒に公開され、そのファイルにはインデックスフィールドの値が含まれます:
Title: Test document
Authors: Alice, Bob
Date:2019-07-22T19:40:36
3/26/2024 1:49:51 PM