PDF変換のためにLibreOfficeをDocker上でヘッドレスモードで実行する
小型のLibreOfficeコンテナを構築し、GUIを使用せずにオフィス文書を変換し、ホストファイルへのアクセスを制限しながらPDF出力を検証します。
はい。単発のドキュメント変換の場合は、LibreOfficeがインストールされた小さなDockerイメージを作成し、実行しますsoffice --headless。--convert-to入力ディレクトリを読み取り専用でマウントし、出力ディレクトリを書き込みアクセスでマウントすることで、PDFがホスト上に表示されます。この例では、Debianベースのイメージを使用し、1つのDOCXファイルをPDFに変換します。LibreOfficeをネットワークサービスとして公開することはありません。

ヘッドレスモードでは、LibreOffice はグラフィカルインターフェイスなしで起動します。LibreOffice はこのモードをコマンドラインおよび API 制御で使用できるように文書化しており、コマンドラインオプションでは出力ディレクトリを指定してファイル変換を行うことができます。Docker はアプリケーションとその依存関係をパッケージ化しているため、スクリプトやワークステーションはホストにデスクトップスイートをインストールすることなく、同じコンテナイメージを実行できます。
このパターンは、ローカルのバッチジョブ、CIタスク、またはファイルを受け取って変換結果を保存するバックエンドワーカーに適しています。単純なヘッドレスコンテナは、それ自体ではHTTP変換APIではありません。ポートをリッスンせず、Webアップロードも受け付けません。永続的なサービスが必要な場合は、変換プロセスの周りにAPIとジョブキューを配置し、リクエストの検証、タイムアウト、ファイルサイズ制限、および分離機能を追加してください。
LinuxまたはmacOSホスト上でBashまたは同様のシェルを使用し、プロジェクトフォルダを個別のディレクトリに作成します。ソースドキュメントをフォルダに配置し、最初の実行時にはフォルダを空のままにinputしておきます。output
mkdir -p lo-work/input lo-work/output
cp report.docx lo-work/input/
cd lo-work
以下のDockerコマンドはUnixスタイルのパスとシェル構文を使用しています。Windowsでは、PowerShellまたはコマンドプロンプトに合わせてホストパスの構文を調整し、Docker Desktopがこれらのフォルダを含むドライブを共有できるように設定してください。
以下の内容で、Dockerfileinsideという名前のファイルを作成してください。lo-work
FROM debian:bookworm-slim
RUN apt-get update && apt-get install -y --no-install-recommends \
libreoffice-writer fonts-liberation \
&& rm -rf /var/lib/apt/lists/*
ENTRYPOINT ["soffice"]
libreoffice-writerWriter には、一般的なワープロ形式に必要な変換フィルターと、Writer 用のライブラリが付属しています。スプレッドシートやプレゼンテーションを変換する必要がある場合は、このライブラリを追加してくださいlibreoffice-calc。libreoffice-impressフォント パッケージは基本となるもので、ドキュメントに必要なフォントと使用権限のあるフォントをインストールしてください。フォントが不足していると、改行やページ区切りが変わってしまう可能性があります。
Dockerfileが含まれているディレクトリからイメージをビルドします。
docker build -t lo-headless .
この例では、Debian Bookwormのパッケージ名を使用しています。ベースイメージのタグやリポジトリのパッケージは時間の経過とともに変更されるため、本番環境でのビルドには、メンテナンスされているベースイメージを選択し、セキュリティアップデートのために定期的に再構築し、再現可能なビルドが必要な場合は、ダイジェストでベースイメージを固定してください。チュートリアルに合わせるためだけに、無関係なリポジトリからパッケージをインストールすることは避けてください。

使い捨てコンテナを開始し、イメージ名の後に変換オプションを渡します。入力マウントは読み取り専用です。出力ディレクトリのみが書き込み可能です。この--userオプションは、Linux 上でホストユーザーとグループ ID を使用してプロセスを実行します。一方、HOME=/tmpLibreOffice に書き込み可能なホームを提供します。ホストユーザーが に書き込めない場合は、フォルダのアクセス許可を調整してくださいoutput。
docker run --rm \
--user "$(id -u):$(id -g)" \
--env HOME=/tmp \
-v "$PWD/input:/input:ro" \
-v "$PWD/output:/output" \
lo-headless \
--headless --nologo \
-env:UserInstallation=file:///tmp/lo-profile \
--convert-to pdf:writer_pdf_Export \
--outdir /output \
/input/report.docx
--headlessGUIを非表示にし、--convert-to pdf:writer_pdf_ExportPDFエクスポートフィルターを選択して、--outdir結果をマウントされた出力フォルダーに出力します。固有のユーザープロファイルパスにより、このプロセスは書き込み可能なLibreOffice構成ディレクトリを持つことができます。1つの長時間稼働コンテナで複数の変換を同時に実行する場合は、各プロセスに異なるプロファイルパスを使用してください。
--mountDockerのより明示的なマウント構文がお好みであれば、代わりにを使用してください-v。バインドマウントはDockerデーモンのホスト上のパスに紐付けられ、読み書きマウントはコンテナプロセスがホストファイルを変更できるようにします。マウントは狭く保ち、ホームディレクトリやDockerソケットのマウントは避け、不要な権限でドキュメント変換ワーカーを実行しないでください。

Docker終了後、ホストの出力ディレクトリを確認してください。
ls -l output/
file output/report.pdf
test -s output/report.pdf
PDFファイルは存在し、空でないことを確認してください。PDFリーダーで開き、ページ数、表、画像、改ページ、フォントなどを確認してから使用してください。処理が正常に終了したからといって、すべての要素が意図どおりにレンダリングされたとは限りません。特に、ドキュメントがコンテナで使用できないフォントや機能を使用している場合は注意が必要です。古いPDFファイルが最新の変換結果と誤認されないように、実行ごとにクリーンな出力ディレクトリまたは新しい出力ファイル名を使用してください。

input先)を確認し/input、ホストoutputディレクトリが選択したユーザーによって書き込み可能であることを確認してください。-env:UserInstallation。LibreOfficeの同時実行プロセスごとに、個別のプロファイルディレクトリを使用してください。-vまたはを使用する前に、両方のホスト ディレクトリが存在することを確認し--mount、デーモンがそれらにアクセスできることを確認してください。オプションの正確な動作については、LibreOffice のコマンドラインパラメータリファレンスを参照してください。パッケージ名は、LibreOffice Writer の Debian Bookworm パッケージ一覧で確認できます。Docker の公式ドキュメントでは、バインドマウントとDockerfile の手順について説明しています。
小型のLibreOfficeコンテナを構築し、GUIを使用せずにオフィス文書を変換し、ホストファイルへのアクセスを制限しながらPDF出力を検証します。
LibreOfficeのプレゼンテーションファイルのサイズを小さくするには、埋め込まれた写真を圧縮したり、適切な画像設定を選択したり、共有前にスライドの品質を確認したりしてください。
カスタムサイズの文書を印刷する前に、LibreOfficeのページ寸法をプリンターに合わせて、印刷可能な余白を確認し、適切な拡大縮小率を設定してください。
繰り返し発生するセルへのアクセスを、一括範囲読み取りと書き込みに置き換え、その結果をベンチマークし、大規模なCalcワークブック内の数式を保護します。
長文の原稿を章ごとに分割し、Writerでそれらを組み立て、スタイル、内容、エクスポート時のチェックを統一する。
BaseのPostgreSQL直接接続オプションを使用して、サーバーの詳細を入力し、サインインし、ODB接続ファイルを保存し、一般的なアクセスエラーのトラブルシューティングを行ってください。
Linuxユーザーのフォントフォルダにフォントをインストールし、LibreOffice Flatpakを再起動して、アプリのサンドボックスを弱めることなくWriterにフォントが表示されることを確認してください。
ローカル優先のワークフロー、権限チェック、およびターゲットを絞ったテストを使用して、macOS Sonoma 上の LibreOffice で作業を保護し、ネットワークドライブの保存時に発生するクラッシュを特定します。
Calcで先頭のゼロを保持するには、CSVインポート時にID列をテキストに設定し、プレビューを確認してから、保存されたデータを検証してください。
LibreOffice文書がロックされる原因を特定し、古いロックファイルを安全に削除して、変更内容を失うことなく編集および保存できることを確認します。