JavaでPDFからテキストを抽出する
以下のチュートリアルでは、ホストされたJPedal Cloud APIを使用してPDFからテキストを抽出する方法を説明します。独自のセルフホスト型JPedalマイクロサービス をセットアップすることもできます。
上記のサービスは通常のHTTPリクエストでアクセスできますが、このチュートリアルではREST API をシンプルなJavaラッパーで包んだオープンソースのJava IDRCloudClient を使用します。
始める前に、最新バージョンのJDK(バージョン8以上)がインストールされていることを確認する必要があります。詳細はJavaのWebサイト で確認できます。
以下は、PDFからテキストを抽出するための基本的なコード例です。設定オプションと高度な機能については、以下を参照してください。
import java.util.Map;
public final class ExampleUsage {
public static void main(final String[] args) {
final IDRCloudClient client = new IDRCloudClient("https://my-self-hosted-service.com/" + IDRCloudClient.JPEDAL);
final HashMap<String, String> params = new HashMap<>();
params.put("input", IDRCloudClient.UPLOAD);
params.put("file", "path/to/file.pdf");
params.put("settings","{\"mode\":\"extractText\",\"type\":\"plainText\"}");
try {
final Map<String, String> results = client.convert(params);
System.out.println(" --------- ");
System.out.println(results.get("previewUrl"));
IDRCloudClient.downloadResults(results, "path/to/outputDir", "example");
} catch (final ClientException | InterruptedException e) {
e.printStackTrace();
}
}
}
JPedalマイクロサービスは、抽出完了時にそのステータス
を送信するコールバックURLを受け付けます。コールバックURLを使用すると、抽出が完了したかどうかを判断するためにサービスをポーリングする必要がなくなります。
コールバックURLは以下のようにparamsマップに指定できます。
final HashMap<String, String> params = new HashMap<>();
params.put("input", IDRCloudClient.UPLOAD);
params.put("file", "path/to/file.pdf");
params.put("callbackUrl", "http://listener.url");
params.put("settings","{\"mode\":\"extractText\",\"type\":\"plainText\"}");
JPedal APIは、抽出をカスタマイズするためのキーと値のペアの設定オプションを含む、文字列化されたJSONオブジェクトを受け付けます。設定はパラメータ配列に追加する必要があります。PDFからテキストを抽出するための設定オプションの完全なリストはこちら で確認できます。
params.put("settings", "{\"key\":\"value\",\"key\":\"value\"}");
ローカルファイルをアップロードする以外に、JPedalマイクロサービスがダウンロードして抽出を実行するURLを指定することもできます。これを行うには、パラメータ変数のinputとfileの値を以下のように置き換えます。
params.put("input", IDRCloudClient.DOWNLOAD);
params.put("url", "http://exampleURL/exampleFile.pdf");
JPedalマイクロサービスが認証を必要とする場合、ユーザー名とパスワードを提供する必要があります。これらは、以下に示すようにusernameとpasswordという名前の2つの変数をconvertメソッドに渡すことで提供されます。
params.put("username","yourUsername");
params.put("password","yourPassword");
