このトピックは FRE for Windows を対象としています。
FineReader Engine ライブラリを Java プロジェクトに追加する
ABBYY FineReader Engine には、FineReader Engine 用の Java クラスライブラリを含む com.abbyy.FREngine-%BUILD_ID%.jar ファイルが含まれています。このファイルは Inc Java フォルダーにあります。このファイルのパスは、コマンドラインの classpath パラメーターや、各種 Java 開発環境のプロジェクト設定で指定できます。例:
%JDK% は Java Development Kit のパスです。
FineReader Engine の読み込みと解放
静的な Engine クラスを使用して、Engine オブジェクトを読み込むことができます。
Engine クラスには、Engine の読み込みと解放を行う ABBYY FineReader Engine の関数 に対応するメソッドが用意されています。
COM を使用して Engine を読み込むには、GetEngineInprocLoader または GetEngineOutprocLoader メソッドを使用します。詳細については、IEngineLoader インターフェイスの説明を参照してください。読み込みに GetEngineOutprocLoader メソッドを使用する場合、親プロセスは自動的に設定されるため、IHostProcessControl::SetClientProcessId メソッドを呼び出す必要はありません。
アプリケーションを Windows 上で開発し、Linux 上で実行する予定がある場合は、Engine の読み込みにこれらのメソッドを使用しないでください。上記で説明した InitializeEngine メソッドのみを使用してください。この制限は、IEngineLoader を実装するオブジェクトを Linux では使用できないためです。
Engine ローダー経由で作成された Engine object を操作するために、Engine クラスには、対応する COM 関数を呼び出してスレッド間で インターフェイス pointer をマーシャリングするメソッドが用意されています。
com.abbyy.FREngine-%BUILD_ID%.jar ファイルは自己展開型アーカイブで、FineReader Engine Java API を初めて使用する際に、お使いのマシン上で展開されます。内容の展開先となる既定のフォルダーは、Windows では Inc \Java です。別のフォルダーを使用する必要がある場合は、上記で説明したいずれかの方法で Engine をロードする前に、Engine.SetJNIDllFolder メソッドを呼び出してください。現在アーカイブの展開先として設定されているフォルダーを確認するには、Engine.GetJNIDllFolder を呼び出してください。
マルチスレッドの Java アプリケーションで Engine を使用する
マルチスレッドの Java アプリケーションでは、EnginesPool クラスを使用できます。このクラスは、FineReader Engine オブジェクトのプールを作成および管理するための包括的なソリューションを提供します。java.lang.Runnable インターフェイスを実装しています。
EnginesPool クラスのメソッドを以下に示します。
EnginesPool クラスの使用例については、EnginesPool のコードサンプルを参照してください。
ABBYY FineReader Engine では、次の型の例外がスローされることがあります。
java.lang.OutOfMemoryError
com.abbyy.FREngine.EngineException
com.abbyy.FREngine.EngineException 例外は java.lang.Exception を継承しており、追加のメソッド int getHResult を 1 つ持っています。このメソッドは、発生したエラーの HRESULT コードを返します。この型の例外では、getMessage() メソッドを使用してエラーメッセージを取得できるだけでなく、エラーコードも取得できます。
ABBYY FineReader Engine API には、メソッドの呼び出し後に新しい値を受け取り、参照渡しで渡す必要がある outパラメーターを持つメソッドがいくつかあります。これらのパラメーターは、型ライブラリおよびこの開発者向けヘルプのメソッド説明で [out] または [in, out] として示されています。
Java で ABBYY FineReader Engine を使用する場合、パラメーターを参照渡しするには、専用の Ref クラスを使用する必要があります。以下の例を参照してください。
次の例では、outパラメーターを IFRPage::FindPageSplitPosition メソッドに参照渡ししています。
次の例では、in/outパラメーターを ICoordinatesConverter::ConvertCoordinates メソッドに参照渡ししています。
次の例では、配列の outパラメーターを IPlainText::GetCharacterData メソッドに参照渡しする方法を示しています。
FineReader Engine は AutoCloseable インターフェイスに対応しており、try 文を使用してオブジェクトに割り当てられたリソースを扱うことができます。これにより、try ブロックを抜けると、クローズ用のメソッドを明示的に呼び出さなくても、割り当てられたすべてのリソースが自動的に閉じられます。コード内のすべてのオブジェクトで try 文を使用することをお勧めします (以下の例を参照) 。
HGLOBAL の取り扱い
ABBYY FineReader Engine API の一部のメソッドは、入力パラメーターとしてメモリ ブロックへの HGLOBAL ハンドル (__int64 として渡されます) を受け取ります。HGLOBAL は Windows 固有のため、Java ラッパーでは、これらのメソッドは代わりにメモリ ブロックの内容を byte[] として受け取ります。該当するメソッドは次のとおりです。
一方、Handle オブジェクトを返すメソッドは、Java ラッパーでもそのまま返されます。
列挙定数の組み合わせを受け取るメソッドおよびプロパティでは、int 値をメソッドまたはプロパティに渡す必要があります。列挙定数の int 値を取得するには、すべての列挙型でサポートされている getValue メソッドを使用します。
以下は、PDFPictureCompressionParams オブジェクトの BwPictureFormats プロパティを設定する方法を示すサンプルコードです。
関連項目
Engine Object のさまざまな読み込み方法 (Windows 向け)
Java でのクロスプラットフォーム開発 (Windows 向け)