JODConverter
- Apache OpenOfficeまたはLibreOfficeを利用してOffice系ファイルのフォーマットを変換するライブラリ
- Excel → PDFなど多様な変換が可能
- https://github.com/sbraconnier/jodconverter/wiki
巷で見かけるサンプルコードは、次のような流れが多数となっている。しかし下記の処理を実行すると、外部プロセスとしてLibreOfficeを起動・終了するため、処理に時間がかかる。例えばWebアプリケーションの1リクエストごとに実行する処理としては、適切でない。
OfficeManager officeManager = LocalOfficeManager.make();
officeManager.start();
// ・・・
// フォーマット変換(中略)
// ・・・
officeManager.stop();
公式に推奨された方法としては、単一のOfficeManagerをWebアプリ起動時にstart()して、全リクエストで共有して、Webアプリ終了時にstop()する。
https://github.com/sbraconnier/jodconverter/wiki/Web-Application
ExternalOfficeManagerもそれなりに有効かもしれない。
ExternalOfficeManager (JODConverter Local 4.3.0 API)
https://www.javadoc.io/static/org.jodconverter/jodconverter-local/4.3.0/org/jodconverter/local/office/ExternalOfficeManager.html
[1] 次のように引数を指定してLibreOfficeを起動しておく。
soffice.exe -accept="socket,host=127.0.0.1,port=2002;urp;"
[2] フォーマット変換時には ExternalOfficeManager を利用して、起動済みのLibreOfficeに接続する。この処理はそれなりに速く実行できる。
OfficeManager officeManager = ExternalOfficeManager.make();
officeManager.start();
// 中略
officeManager.stop();
ただし、Javadocに書いてある通り、LibreOfficeが異常終了しても、JODConverterはLibreOfficeを再起動しない。
Since this implementation does not manage the Office process, it does not support auto-restarting the process if it exits unexpectedly.