> ## Documentation Index
> Fetch the complete documentation index at: https://docs.abbyy.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Linux で FRE と Java を使用する

> Linux 上の Java から ABBYY FineReader Engine を使用するには、`com.abbyy.FREngine` .jar をclasspathに追加し、InitializeEngine と DeinitializeEngine を呼び出して Engine をロードおよびアンロードします。

<Note>
  Linux 版の完全な一覧については、Linux ディストリビューションの開発者向けヘルプを参照してください。主な制限事項の 1 つとして、IEngineLoader を実装するオブジェクトは Linux および macOS では使用できません ([Windows 版と Linux 版の ABBYY FineReader Engine 12 の違い](/ja/fine-reader/engine/specifications/differences-between-abbyy-finereader-engine-for-windows-and-linux)を参照) 。
</Note>

<div id="adding-finereader-engine-library-to-a-java-project">
  ## JavaプロジェクトへのFineReader Engineライブラリの追加
</div>

ABBYY FineReader Engineには、FineReader Engine用のJavaクラスライブラリが含まれた`com.abbyy.FREngine-%BUILD&#95;ID%.jar`ファイルが用意されています。このファイルはInc/Javaフォルダーにあります。このファイルのパスは、コマンドラインのclasspathパラメーターや、各種Java開発環境のプロジェクト設定で指定できます。例:

```csharp theme={null}
$JDK/bin/javac -classpath <path>/com.abbyy.FREngine-%BUILD_ID%.jar Hello.java
```

\$JDK は Java Development Kit へのパスです。

<Warning>
  サポートされている Java Development Kit の一覧については、[システム要件](/ja/fine-reader/engine/specifications/system-requirements)を参照してください。
</Warning>

<div id="loading-and-unloading-finereader-engine">
  ## FineReader Engine のロードとアンロード
</div>

静的な Engine クラスを使用して、[Engine](/ja/fine-reader/engine/api-reference/engine-object-iengine-interface) オブジェクトをロードできます。

Engine クラスには、Engine のロードとアンロードを行う ABBYY FineReader Engine の[関数](/ja/fine-reader/engine/api-reference/functions)に対応するメソッドが用意されています。

| Function                                                                                         | Engine class method | The signature of the Engine class method                                                                                                                                                                                         |
| ------------------------------------------------------------------------------------------------ | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [InitializeEngine](/ja/fine-reader/engine/api-reference/functions/initializeengine-function)     | InitializeEngine    | `csharp static public IEngine InitializeEngine( String dllFolder, String customerProjectId, String licensePath, String licensePassword, String dataFolder, String tempFolder, boolean isSharedCPUCoresMode ) throws Exception; ` |
| [DeinitializeEngine](/ja/fine-reader/engine/api-reference/functions/deinitializeengine-function) | DeinitializeEngine  | `static public void DeinitializeEngine() throws Exception;`                                                                                                                                                                      |

<Accordion title="コード サンプル">
  ```csharp theme={null}
  import com.abbyy.FREngine.*;
  public class Hello {
      public static void main( String[] args )
      {
          try {
              // オンライン ライセンスを使用して Engine をロードする
              engine = Engine.InitializeEngine( path, customerProjectId, LicensePath, LicensePassword, "", "", false );
              try {
                  // 定義済みプロファイルをロードする
                  engine.LoadPredefinedProfile( "DocumentConversion_Accuracy" );
                  // 画像を処理する
                  IFRDocument document = engine.CreateFRDocument();
                  ...
              } finally {
                  engine = null;
                  System.runFinalization();
                  Engine.DeinitializeEngine();
              }
          } catch( Exception ex ) {
              trace( ex.getMessage() );
          }
      }
      private IEngine engine = null;
  ...
  }
  ```
</Accordion>

<Note>
  com.abbyy.FREngine-%BUILD\_ID%.jar ファイルは自己解凍型アーカイブで、FineReader Engine Java API の初回使用時にお使いのマシン上で展開されます。内容の展開先として使用される既定のフォルダーは Inc/Java です。別のフォルダーを使用する必要がある場合は、上記のいずれかのメソッドで Engine をロードする前に、Engine.SetJNIDllFolder メソッドを呼び出してください。現在アーカイブの展開先として設定されているフォルダーを確認するには、Engine.GetJNIDllFolder を呼び出してください。
</Note>

<div id="handling-errors">
  ## エラー処理
</div>

ABBYY FineReader Engine では、次の型の例外がスローされることがあります。

* java.lang.OutOfMemoryError
* com.abbyy.FREngine.EngineException

com.abbyy.FREngine.EngineException 例外は java.lang.Exception を継承しており、追加のメソッド `int getHResult` が 1 つあります。このメソッドは、発生したエラーの HRESULT コードを返します。この型の例外では、`getMessage()` メソッドを使用してエラーメッセージを取得できるだけでなく、エラーコードも取得できます。

```
try {
    ...
} catch( Exception ex ) {
    displayMessage( "Message = " + ex.getMessage() );
    if( ex instanceof EngineException ) {
        displayMessage( "HResult = " + Integer.toString( ( ( EngineException )ex ).getHResult() ) );
    }
}
```

<div id="calling-methods-with-out-parameters">
  ## out-parameter を含むメソッドの呼び出し
</div>

ABBYY FineReader Engine API には、メソッド呼び出し後に新しい値を受け取り、参照渡しする必要がある out-parameter を持つメソッドがいくつかあります。これらのパラメーターは、型ライブラリおよびこの開発者向けヘルプのメソッドの説明で \[out] または \[in, out] として示されています。

Java で ABBYY FineReader Engine を使用する場合、パラメーターを参照渡しするには特別な Ref クラスを使用する必要があります。以下の例を参照してください。

out-parameter を [IFRPage::FindPageSplitPosition](/ja/fine-reader/engine/api-reference/document-related-objects/frpage/findpagesplitposition-method) メソッドに参照渡しする例:

<Accordion title="out-parameter のサンプルコード">
  ```
  Ref<PageSplitDirectionEnum> _ps = new Ref<PageSplitDirectionEnum>();
  Ref<Integer> _start = new Ref<Integer>();
  Ref<Integer> _end = new Ref<Integer>();
  page.FindPageSplitPosition( null, null, _ps, _start, _end );
  PageSplitDirectionEnum ps = _ps.get();
  Integer start = _start.get();
  Integer end = _end.get();
  ```
</Accordion>

in/out parameter を [ICoordinatesConverter::ConvertCoordinates](/ja/fine-reader/engine/api-reference/image-related-objects/coordinatesconverter/convertcoordinates-method) メソッドに参照渡しする例:

<Accordion title="in/out parameter のサンプルコード">
  ```
  Ref<Integer> _x = new Ref<Integer>( 100 );
  Ref<Integer> _y = new Ref<Integer>( 200 );
  cnv.ConvertCoordinates( ImageTypeEnum.IT_Modified, ImageTypeEnum.IT_Base, _x, _y );
  Integer x = _x.get();
  Integer y = _y.get();
  ```
</Accordion>

<div id="collecting-garbage">
  ## ごみの収集
</div>

FineReader Engine は AutoCloseable インターフェースをサポートしており、オブジェクトに割り当てられたリソースへのアクセスに try 文を使用できます。これにより、try ブロックが終了すると、クローズメソッドを明示的に呼び出さなくても、割り当てられたすべてのリソースが自動的に解放されます。コード内のすべてのオブジェクトに try 文を使用することをお勧めします (以下の例を参照) ：

<Accordion title="サンプルコード">
  ```csharp theme={null}
  try( IFRDocument document = engine.CreateDocument() )
   {
    // ドキュメントに画像を追加する
    document.AddImageFile( imagePath, null, null );
    ...
    // 結果をPDFに保存する
    document.Export( pdfExportPath, FileExportFormatEnum.FEF_PDF, pdfParams );
   }
  ```
</Accordion>

<div id="working-with-enumerations">
  ## 列挙型の使用
</div>

列挙定数の組み合わせを受け取るメソッドやプロパティでは、そのメソッドまたはプロパティに int 値を渡す必要があります。列挙定数の int 値を取得するには、すべての列挙型でサポートされている getValue メソッドを使用します。

以下は、[PDFPictureCompressionParams](/ja/fine-reader/engine/api-reference/parameter-objects/export-parameters/pdfpicturecompressionparams) オブジェクトの [BwPictureFormats](/ja/fine-reader/engine/api-reference/parameter-objects/export-parameters/pdfpicturecompressionparams#bwpictureformats) プロパティを設定する方法を示すコード例です：

```
IPDFExportParams pep = engine.CreatePDFExportParams();
IPDFPictureCompressionParams ppcp = pep.getPictureCompressionParams();
ppcp.setBwPictureFormats(BwPictureFormatsEnum.BWPF_Auto.getValue());
```

<div id="using-the-rmi-capable-wrapper">
  ## RMI 対応ラッパーの使用
</div>

リモートメソッド呼び出し (RMI) をサポートする Java ラッパーの別バージョンが用意されています。すべてのクラスは UnicastRemoteObject を継承して Remote インターフェイスをサポートしており、すべてのメソッドが RemoteException をスローする可能性があります。RMI 対応ラッパーでは、既定で、PDF 処理の呼び出しが初期化済みの PDFium を使用する別スレッドにリダイレクトされます。

<Warning>
  RMI 対応ラッパーを使用するには Java Development Kit が必要です。サポートされている Java Development Kit の一覧については、[システム要件](/ja/fine-reader/engine/specifications/system-requirements)を参照してください。
</Warning>

com.abbyy.rmi.FREngine パッケージにはクライアントアプリケーションで使用するリモートインターフェイスが含まれており、com.abbyy.rmi.server.FREngine パッケージはサーバー側で使用されます。また、メソッドのオーバーロードに関する制限により、libFREngine.so の代わりに別の動的ライブラリ libFREngine.rmi\_server.so も使用する必要があります。

これらのパッケージは、シンプルなクライアントサーバーアプリケーションであれば十分です。ただし、FineReader Engine 自体はスレッドセーフではないため、1 つの Engine インスタンスに同時にアクセスするワーカースレッドが常に 1 つだけになるよう、開発者側で追加の対応を行う必要があります。サーバー側の Engine プールの完全で再利用可能な実装と、それに接続するマルチスレッドクライアントについては、配布パッケージに含まれているコードサンプル ([rmiPoolServer](/ja/fine-reader/engine/guided-tour/samples#rmipoolserver) および [threadPoolClient](/ja/fine-reader/engine/guided-tour/samples#threadpoolclient) サンプル、com.abbyy.rmi.pool.FREngine パッケージ、com.abbyy.rmi.pool.impl.FREngine パッケージ) を参照してください。

<div id="using-events-and-callback-interfaces">
  ### イベントとコールバックインターフェイスの使用
</div>

クライアント側で実装したイベントおよびコールバックインターフェイスは、使用後にRMIランタイムから削除する必要があることに注意してください。

```
java.rmi.server.UnicastRemoteObject.unexportObject( callback, true );
callback = null;
```
