JavaでPDFからテキストを抽出する
以下のチュートリアルでは、ホストされたJPedalクラウドAPIを使用してPDFからテキストを抽出する方法を紹介します。独自のセルフホスト型JPedalマイクロサービス をセットアップすることも可能です。
上記のサービスは通常のHTTPリクエストでアクセスできますが、このチュートリアルではREST API をシンプルなJavaラッパーで扱えるようにした、オープンソースのJava IDRCloudClient を使用します。
始める前に、最新バージョンのJDK(バージョン8以上)がインストールされていることを確認する必要があります。詳細はJavaのウェブサイト をご覧ください。
以下は、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オブジェクトを受け付けます。設定はparameters配列に追加する必要があります。PDFからテキストを抽出するための設定オプションの完全なリストはこちら にあります。
params.put("settings", "{\"key\":\"value\",\"key\":\"value\"}");
ローカルファイルのアップロードに加えて、JPedalマイクロサービスがダウンロードして抽出を実行するURLを指定することもできます。これを行うには、parameters変数の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");
