PDF変換のためにLibreOfficeをDocker上でヘッドレスモードで実行する

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

LibreOffice WriterとフォントがインストールされたDebianベースのDockerfileを表示するターミナルエディタ
DockerfileはLibreOffice Writerと基本フォントパッケージをインストールし、コンテナコマンドとしてsofficeを使用します。

ヘッドレスモードとはどのような機能を持つのか、またDockerはどのような場合に役立つのか?

ヘッドレスモードでは、LibreOffice はグラフィカルインターフェイスなしで起動します。LibreOffice はこのモードをコマンドラインおよび API 制御で使用できるように文書化しており、コマンドラインオプションでは出力ディレクトリを指定してファイル変換を行うことができます。Docker はアプリケーションとその依存関係をパッケージ化しているため、スクリプトやワークステーションはホストにデスクトップスイートをインストールすることなく、同じコンテナイメージを実行できます。

このパターンは、ローカルのバッチジョブ、CIタスク、またはファイルを受け取って変換結果を保存するバックエンドワーカーに適しています。単純なヘッドレスコンテナは、それ自体ではHTTP変換APIではありません。ポートをリッスンせず、Webアップロードも受け付けません。永続的なサービスが必要な場合は、変換プロセスの周りにAPIとジョブキューを配置し、リクエストの検証、タイムアウト、ファイルサイズ制限、および分離機能を追加してください。

1. 入力フォルダと出力フォルダを作成する

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がこれらのフォルダを含むドライブを共有できるように設定してください。

2. LibreOfficeでイメージを作成する

以下の内容で、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のパッケージ名を使用しています。ベースイメージのタグやリポジトリのパッケージは時間の経過とともに変更されるため、本番環境でのビルドには、メンテナンスされているベースイメージを選択し、セキュリティアップデートのために定期的に再構築し、再現可能なビルドが必要な場合は、ダイジェストでベースイメージを固定してください。チュートリアルに合わせるためだけに、無関係なリポジトリからパッケージをインストールすることは避けてください。

ターミナルに「docker build -t lo-headless . コンテナイメージのビルドを完了しています」と表示されています。
変換コンテナを実行する前に、Dockerfileからローカルイメージをビルドしてください。

3. LibreOfficeを個別のマウントで実行する

使い捨てコンテナを開始し、イメージ名の後に変換オプションを渡します。入力マウントは読み取り専用です。出力ディレクトリのみが書き込み可能です。この--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ソケットのマウントは避け、不要な権限でドキュメント変換ワーカーを実行しないでください。

読み取り専用入力、書き込み可能な出力、ヘッドレス変換、および個別のプロファイルを使用してlo-headlessコンテナを実行するターミナルコマンド
実行コマンドは、ソースファイルをsofficeに渡すと同時に、ホストのアクセスを2つのプロジェクトフォルダに制限します。

4. PDFが作成されたことを確認します。

Docker終了後、ホストの出力ディレクトリを確認してください。

ls -l output/
file output/report.pdf
test -s output/report.pdf

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

出力ディレクトリにターミナル一覧レポート.pdfを作成し、それをPDFドキュメントとして識別する。
出力ファイルが存在し、PDFとして認識されていることを確認し、ページの内容を確認してレイアウトの変更点がないか調べてください。

変換が失敗した場合、何をチェックすればよいですか?

  • 出力ファイルがありません。ソースファイル名とコンテナパス(マウントinput先)を確認し/input、ホストoutputディレクトリが選択したユーザーによって書き込み可能であることを確認してください。
  • プロファイルまたはロックのエラー:パスが書き込み可能であることを確認してください-env:UserInstallation。LibreOfficeの同時実行プロセスごとに、個別のプロファイルディレクトリを使用してください。
  • レイアウトが変更されました。画像に必要なフォントをインストールし、PDFを確認してください。フォントの利用可能性、エクスポートフィルター、バージョンの違いにより、レンダリング結果はデスクトップシステムと異なる場合があります。
  • Docker マウント エラー:-vまたはを使用する前に、両方のホスト ディレクトリが存在することを確認し--mount、デーモンがそれらにアクセスできることを確認してください。

オプションの正確な動作については、LibreOffice のコマンドラインパラメータリファレンスを参照してください。パッケージ名は、LibreOffice Writer の Debian Bookworm パッケージ一覧で確認できます。Docker の公式ドキュメントでは、バインドマウントとDockerfile の手順について説明しています。

コメントを残す

PDF変換のためにLibreOfficeをDocker上でヘッドレスモードで実行する

PDF変換のためにLibreOfficeをDocker上でヘッドレスモードで実行する

小型のLibreOfficeコンテナを構築し、GUIを使用せずにオフィス文書を変換し、ホストファイルへのアクセスを制限しながらPDF出力を検証します。

LibreOffice Impress ファイルの画像をぼかさずにサイズを小さくする方法

LibreOffice Impress ファイルの画像をぼかさずにサイズを小さくする方法

LibreOfficeのプレゼンテーションファイルのサイズを小さくするには、埋め込まれた写真を圧縮したり、適切な画像設定を選択したり、共有前にスライドの品質を確認したりしてください。

LibreOfficeでカスタムサイズの印刷時にトリミングされないようにする

LibreOfficeでカスタムサイズの印刷時にトリミングされないようにする

カスタムサイズの文書を印刷する前に、LibreOfficeのページ寸法をプリンターに合わせて、印刷可能な余白を確認し、適切な拡大縮小率を設定してください。

データの読み書きをバッチ処理で行うことで、Calcマクロの処理速度を向上させる

データの読み書きをバッチ処理で行うことで、Calcマクロの処理速度を向上させる

繰り返し発生するセルへのアクセスを、一括範囲読み取りと書き込みに置き換え、その結果をベンチマークし、大規模なCalcワークブック内の数式を保護します。

リンクされたマスター文書を使用してLibreOfficeブックを整理する

リンクされたマスター文書を使用してLibreOfficeブックを整理する

長文の原稿を章ごとに分割し、Writerでそれらを組み立て、スタイル、内容、エクスポート時のチェックを統一する。

組み込みウィザードを使用してLibreOffice BaseをPostgreSQLに接続する

組み込みウィザードを使用してLibreOffice BaseをPostgreSQLに接続する

BaseのPostgreSQL直接接続オプションを使用して、サーバーの詳細を入力し、サインインし、ODB接続ファイルを保存し、一般的なアクセスエラーのトラブルシューティングを行ってください。

LibreOffice Flatpakでカスタムフォントを利用できるようにする

LibreOffice Flatpakでカスタムフォントを利用できるようにする

Linuxユーザーのフォントフォルダにフォントをインストールし、LibreOffice Flatpakを再起動して、アプリのサンドボックスを弱めることなくWriterにフォントが表示されることを確認してください。

SonomaでLibreOfficeの保存がクラッシュするのを防ぐには:まずローカルで作業しましょう

SonomaでLibreOfficeの保存がクラッシュするのを防ぐには:まずローカルで作業しましょう

ローカル優先のワークフロー、権限チェック、およびターゲットを絞ったテストを使用して、macOS Sonoma 上の LibreOffice で作業を保護し、ネットワークドライブの保存時に発生するクラッシュを特定します。

CSV IDをテキストとしてインポートすることで、Calcでそのまま保持できます。

CSV IDをテキストとしてインポートすることで、Calcでそのまま保持できます。

Calcで先頭のゼロを保持するには、CSVインポート時にID列をテキストに設定し、プレビューを確認してから、保存されたデータを検証してください。

LibreOfficeドキュメントが不明なユーザーによってロックされました:安全な解決策

LibreOfficeドキュメントが不明なユーザーによってロックされました:安全な解決策

LibreOffice文書がロックされる原因を特定し、古いロックファイルを安全に削除して、変更内容を失うことなく編集および保存できることを確認します。