Linux 環境のサーバで Office ファイルを PDF に変換する
最初に結論
- LibreOffice を コマンドラインから使おう
- LibreOffice のコマンドライン実行を用いた Office -> PDF 変換サーバを実現する方法としては shelfio/aws-lambda-libreoffice のアプローチで自前実装するか Gotenberg を使う方法が良さそう
shelfio/aws-lambda-libreoffice のアプローチで自前実装する
shelfio/aws-lambda-libreoffice
は LibreOffice をコンテナイメージ版の AWS Lambda で動かすプロジェクトであり、shelfio/libreoffice-lambda-base-image というベースイメージとそれを前提とした Node.js ライブラリである shelfio/aws-lambda-libreoffice から成る。
リリース当時の紹介ブログは以下。
とても良いプロジェクトなのだが、2024/12 現在メンテナンスが滞っているように見える。(依存している LibreOffice のバージョンが 7.6.7 のままで、アップグレードする PR も放置されている)
なので、2024/12 現在ではこのプロジェクトのアプローチを参考にしつつ元ライブラリをフォークしたり古い部分は自前で実装し直すのが良いだろう。
以下はそのようにして作った Lambda で動く Office -> PDF 変換サーバの実装例。
Gotenberg を使う
Gotenberg は API ベースで Office ファイル含む様々なドキュメント形式のファイルを PDF に変換できる OSS で、内部で LibreOffice を使っている。
公式にサポートされている Docker Compose や Kubernetes、Cloud Run でデプロイできる場合はこちらを使った方が自前実装をしなくて良いので楽だろう。
Docker イメージが公開されているので、コンテナをデプロイできるプラットフォームならある程度動くはず。
AWS Lambda では動かない様子だが...。
筆者は AWS App Runner にデプロイしてみたが、特に詰まるところなくデプロイできた。
その他
LibreOffice を利用した PDF 変換の他社事例
AWS の公式ブログでも LibreOffice を利用した PDF 変換のアーキテクチャが紹介されており、shelfio/libreoffice-lambda-layer という前述した shelfio/libreoffice-lambda-base-image の前身プロジェクトが利用されている。
ちなみに Slack も Office ファイルのプレビュー機能を実現するのに、LibreOffice を使って PDF に変換している様子。
Windows 環境のサーバを動かせる場合
Windows 環境のサーバを動かせるなら PowerShell 経由で Office を操作して PDF エクスポートするのが良いかもしれない。
以下はナレッジワーク社の例。
PowerPoint などの Office 系ファイルは Windows OS でしか動作しないため、Windows OS 環境に Converter を構築しています。現在は、仮想専用サーバーにインストールした Windows OS 内で PowerShell を通して Office を操作し、ファイルを開いて PDF をエクスポートします。
Discussion