LibreOfficeコマンドラインを使用してDOCXファイルをPDFに一括変換する方法

Word文書が数十個ある場合、LibreOfficeでそれぞれを開いて個別にエクスポートするのは時間がかかり、中断されやすいです。 のようなコマンドを使えばsoffice --convert-to pdfバッチ変換は可能ですが、よくある問題として、PDFが間違ったフォルダに送信されたり、スペースを含むファイル名が失われたり、LibreOfficeが既に開いているウィンドウにジョブを添付したり、Wordとは異なるレイアウトのPDFが生成されたりすることが挙げられます。以下のワークフローは、1つのテストファイルから始まり、安全なバッチコマンドに進み、最後に出力の欠落や形式異常がないかを確認します。

これらの例では、LibreOffice 26.8 ヘルプに記載されている最新の LibreOffice コマンドライン構文を使用しています (2026 年 10 月 6 日時点)。Writerwriter_pdf_Export文書用の PDF エクスポートフィルタを使用しています。変換は通常の DOCX ファイルに適していますが、LibreOffice と Microsoft Word ではフォントやページレイアウトの表示が異なる場合があるため、複雑なレイアウトの場合は確認が必要です。

フォルダを変換する前に

変換を実行するコンピューターにLibreOfficeをインストールしてください。サーバーの場合は、そのシステムのパッケージマネージャーまたはインストーラーを使用して、sofficeコマンドシェルでLibreOfficeが利用可能であることを確認してください。Windowsでは、実行ファイルは通常 にありますがC:\Program Files\LibreOffice\program\soffice.exe、インストールパスは異なる場合があります。

ソースとなるDOCXファイル用と、生成されるPDFファイル用の2つのフォルダを準備してください。出力フォルダは新規または空のものを使用してください。既に同じ名前のPDFファイルが存在するフォルダに変換しようとすると、処理や環境によっては、LibreOfficeが上書きの確認を求めたり、置き換えに失敗したりする場合があります。ソースと出力を分けておくことで、スクリプトがディレクトリをスキャンする際に意図しない変換ループが発生するのを防ぐこともできます。

特殊なフォントが使用されている文書の場合は、変換前に元の作成者が使用したフォントをインストールしてください。フォントが不足していると、DOCXファイルがエラーなく開いた場合でも、改行、ページ数、表の幅、ページ番号などが変更される可能性があります。

1. まずDOCXファイルを1つテストします。

大量のバッチ処理を実行する前に、代表的なドキュメントを変換してください。以下の例では、サンプルパスを実際のパスに置き換えてください。

mkdir -p "/srv/docs/converted"
soffice --headless --convert-to pdf:writer_pdf_Export --outdir "/srv/docs/converted" "/srv/docs/incoming/Annual Report.docx"

--headlessLibreOffice を起動しますが、グラフィカル インターフェイスは開きません。--convert-to出力形式とオプションのフィルタを選択し、--outdir出力先を指定します。LibreOffice のフィルタ テーブルにwriter_pdf_Exportは、Writer からの PDF 出力用のフィルタが一覧表示されます。すべてを変換する前に、テスト PDF を確認してください。ページ区切り、ヘッダーとフッター、表、画像、ハイパー リンク、特殊文字などを確認してください。

テストで PDF が生成されない場合は、ソース パスが正しいこと、ファイルが読み取り可能であること、出力フォルダーが書き込み可能であることを確認してください。また、コマンドを実行するアカウントと同じアカウントに LibreOffice がインストールされていることを確認してください。公式リファレンス: LibreOffice ファイル変換フィルターおよびLibreOffice コマンドライン パラメーター。

2. すべての DOCX ファイルを 1 つの Bash コマンドで変換する

Linux または macOS では、ターミナルで Bash を開き、ファイル名パターンを使用します。sofficeが にあることを確認してくださいPATH。macOS では、LibreOffice アプリケーションバンドル内の実行可能ファイルを呼び出す必要がある場合があります。この例では、1 つの入力フォルダー内の DOCX ファイルを直接処理します。

src="/srv/docs/incoming"
out="/srv/docs/converted"

mkdir -p "$out"
soffice --headless --convert-to pdf:writer_pdf_Export --outdir "$out" "$src"/*.docx

Bash は*.docxLibreOffice を起動する前に、個別のファイル引数に展開します。各パス名が 1 つの引数として渡されるため、ディレクトリ名とファイル名に含まれるスペースは保持されます。出力 PDF はソースファイル名の語幹を保持するため、 のようにAnnual Report.docxなりますAnnual Report.pdf。このコマンドは指定されたフォルダ内のファイルのみを処理し、子フォルダは検索しません。

初回実行時は空の保存先を使用してください。ワイルドカードコマンドを実行する前に、入力フォルダに目的のファイルが含まれていること、およびPDFファイルを保存するのに十分なディスク容量があることを確認してください。Bashでは、シェルオプションを設定しない限り、一致しないワイルドカードはそのままリテラルとして扱われます。フォルダが空になる可能性がある場合は、まず少なくとも1つのDOCXファイルが存在するかテストするか、次のセクションのファイルごとのループを使用してください。

3. 大きなフォルダの場合はループを使用するか、明示的なエラー処理を行う。

フォルダに数千ものドキュメントが含まれている場合、シェルは非常に長い引数リストを拒否することがあります。ループを使用することで、すべてのファイル名を一度にオペレーティングシステムに送信することを回避し、パスが引用符で囲まれている場合はスペースを安全に処理できます。

src="/srv/docs/incoming"
out="/srv/docs/converted"
mkdir -p "$out"

found=false
for file in "$src"/*.docx; do
  [ -f "$file" ] || continue
  found=true
  soffice --headless --convert-to pdf:writer_pdf_Export --outdir "$out" "$file" || {
    printf 'Conversion failed: %s\n' "$file" >&2
  }
done
[ "$found" = true ] || { echo 'No DOCX files found.' >&2; exit 1; }

引用符で囲まれたforループは、ファイル名にスペースが含まれていても処理し、ファイルリスト全体を1つの大きな引数として送信しません。ファイルごとにLibreOffice変換を1回実行するため、単一のワイルドカードコマンドよりも時間がかかる場合があります。入力フォルダ直下のファイルのみをスキャンします。サブフォルダを含めるには、再帰的なファイル検索を使用し、各入力フォルダを出力レイアウトに保持してください。そうしないと、同じ基本名を持つ2つのファイルによってPDFファイル名が衝突する可能性があります。

4. Windows PowerShell でフォルダーを変換する

PowerShellでは、各フルパスを単一の引数として渡します。以下のループは、LibreOfficeがゼロ以外の終了コードを返したファイルを報告します。

$soffice = 'C:\Program Files\LibreOffice\program\soffice.exe'
$inputDir = 'C:\Documents\incoming'
$outputDir = 'C:\Documents\converted'

New-Item -ItemType Directory -Force -Path $outputDir | Out-Null
$files = Get-ChildItem -LiteralPath $inputDir -Filter '*.docx' -File
if ($files.Count -eq 0) {
    throw "No DOCX files found in $inputDir"
}

$failed = @()
foreach ($file in $files) {
    & $soffice --headless --convert-to pdf:writer_pdf_Export --outdir $outputDir $file.FullName
    if ($LASTEXITCODE -ne 0) {
        $failed += $file.FullName
    }
}
if ($failed.Count -gt 0) {
    Write-Warning "Review failed conversions: $($failed -join '; ')"
}

$sofficeLibreOfficeが別の場所にインストールされている場合は変更してください。PowerShellのGet-ChildItem例は再帰的ではありません。-Recurseネストされたフォルダーからの出力名の重複を回避する方法も計画している場合にのみ追加してください。ゼロ以外の終了ステータスは有用な警告ですが、想定される各PDFが存在し、正しく開くことを確認する代わりにはなりません。

5. プロファイルの競合や予期せぬ上書きを防ぐ

LibreOffice はユーザー プロファイルへの書き込みアクセス権限を必要とします。対話型の LibreOffice ウィンドウが既に実行されている場合、コマンドライン変換はそのインスタンスを再利用するか、ロックされたプロファイルで待機する可能性があります。単発のジョブを実行する前に、他の LibreOffice ウィンドウを閉じてください。自動化や個別に実行する必要のあるジョブの場合は、-env:UserInstallationブートストラップ オプションを使用して変換専用のユーザー プロファイルを指定してください。LibreOffice のドキュメントには、デフォルト以外のプロファイルを選択するオプションが記載されています。

soffice -env:UserInstallation=file:///tmp/lo-bulk-profile \
  --headless --convert-to pdf:writer_pdf_Export \
  --outdir "/srv/docs/converted" "/srv/docs/incoming/Annual Report.docx"

変換を実行するアカウントが書き込み可能なプロファイルディレクトリを使用してください。同じプロファイルに対して同時に2つのLibreOfficeプロセスを実行しないでください。同時実行するワーカーごとに異なるプロファイルを使用してください。インストール済みのバージョンとストレージ設定をテストするまでは、自動化処理を直列に実行してください。

既存のPDFファイルの処理方法を決定せずに、本番環境のフォルダへの変換を実行しないでください。以前の結果をバックアップまたは移動するか、タイムスタンプ付きの新しいディレクトリに書き込んでください。バッチエクスポートでは、署名済み、承認済み、または以前にレビュー済みのPDFファイルを、通知なしに上書きしないでください。

6. 一般的なバッチ変換エラーのトラブルシューティング

  • 出力ファイルがない場合:入力グロブまたはPowerShellフィルターを確認し、スペースを含むパスを引用符で囲み、出力ディレクトリが存在し、書き込み可能であることを確認してください。パスの問題とバッチの問題を切り分けるために、単一ファイルテストを再度実行してください。
  • コマンドは終了しましたが、一部のファイルが見つかりません。ターミナルの出力と終了ステータスを確認し、ソースリストと作成されたPDFファイルを比較してください。破損している、またはパスワードで保護されているDOCXファイルは、変換前に修復するか、手動で開く必要がある場合があります。
  • LibreOfficeがフリーズしたり、プロファイルがロックされていると表示される場合は、対話型のLibreOfficeプロセスをすべて終了するか、専用の-env:UserInstallationプロファイルを使用して再試行してください。LibreOfficeがプロファイルディレクトリを使用している間は、そのディレクトリを削除しないでください。
  • フォントやページネーションがWordと異なる場合は、必要なフォントをインストールし、代表的なPDFファイルと元のファイルを比較してください。Wordでの正確な表示が契約上重要な文書については、作成アプリケーションまたは承認済みのレンダリングサービスでレイアウトを確認してください。
  • 既存のPDFファイルは変更されません。空の出力フォルダに変換し、コマンドがそのフォルダを指していることを確認してください。バッチ処理を再実行すると、必ず以前のPDFファイルが上書きされるとは限らないので注意してください。

LibreOffice では、フィルタ名の後にページ範囲やアクセシビリティ関連の設定など、PDF エクスポートオプションを指定することもできます。これらのオプションは、すべてのファイルで同じエクスポート動作が必要な場合に便利ですが、一括適用する前にサンプルでテストしてください。詳細については、公式のPDF エクスポートコマンドラインパラメータを参照してください。

7. 完成したバッチを確認する

コマンドがプロンプトに戻ったかどうかだけで成功を判断しないでください。ソースとなる DOCX ファイルの数と出力フォルダ内の PDF ファイルの数を比較し、バッチ処理の異なる部分からいくつかの PDF ファイルを調べてください。それぞれの PDF ファイルが正しく開き、ページ数が想定どおりであり、最終ページ、表、画像、ヘッダー、フッター、アクセント付き文字や記号などの文字が含まれていることを確認してください。

Linuxでは、非再帰的な入力ファイルと出力ファイルの数を数えるには、以下の方法を使用できます。

find "/srv/docs/incoming" -maxdepth 1 -type f -iname '*.docx' | wc -l
find "/srv/docs/converted" -maxdepth 1 -type f -iname '*.pdf' | wc -l

一致するファイルの数は、最初の確認としては役立ちますが、すべてのファイルが正しいことの証明にはなりません。一致するファイル数が異なる場合は、ファイル名を比較して、変換漏れを特定してください。処理量が多いワークフローや、厳格な管理が必要なワークフローでは、各ソースパス、戻りコード、出力パス、検証結果をログに記録し、PDF のレビューが完了するまでソースファイルを保管してください。LibreOffice のコマンドラインワークフローでは、繰り返し行う手動エクスポートが不要になり、別の検証パスによって、自動化では確実に判断できないレイアウトやファイルレベルの問題を検出できます。

コメントを残す

ONLYOFFICE Desktop EditorsをownCloudサーバーに接続する方法

ONLYOFFICE Desktop EditorsをownCloudサーバーに接続する方法

ONLYOFFICE Desktop EditorsをownCloudサーバーに接続する手順を解説。ログイン、クラウド上のファイル編集、接続の管理、設定時によくあるトラブルの確認方法を紹介します。

Collabora OnlineのCPU使用率が高い問題を解決する方法(loolwsd / coolwsdより)

Collabora OnlineのCPU使用率が高い問題を解決する方法(loolwsd / coolwsdより)

Collabora OnlineのCPU使用率が高い場合、ビジー状態のキットプロセスを特定し、メトリクスとログを確認し、同時実行性とクリーンアップを調整し、修正が安全に行われたことを検証することで、トラブルシューティングを行います。

ONLYOFFICEドキュメントをロゴとカラーでカスタマイズする方法

ONLYOFFICEドキュメントをロゴとカラーでカスタマイズする方法

ONLYOFFICE Docsをヘッダーロゴやインターフェースカラーでカスタマイズする方法を学びましょう。ライセンス制限、テーマJSONの設定、Dockerパス、テスト方法なども解説します。

LibreOffice Calcのダークモードにおけるテキスト表示の問題を修正する

LibreOffice Calcのダークモードにおけるテキスト表示の問題を修正する

LibreOffice Calc で読みにくいテキストを修正するには、アプリのテーマ、セルのフォントと塗りつぶしの色、スタイル、条件付き書式設定を確認し、印刷出力を検証してください。

LibreOfficeで「ドキュメントは不明なユーザーによってロックされています」エラーを修正する

LibreOfficeで「ドキュメントは不明なユーザーによってロックされています」エラーを修正する

LibreOfficeの不明ユーザーによるロック警告を安全に解除します。アクティブなセッションを確認し、コピーを保護し、検証済みの古いロックのみを削除して、ドキュメントをテストします。

LibreOffice Writer でアラビア語とヘブライ語の右から左へのテキスト表示を修正する

LibreOffice Writer でアラビア語とヘブライ語の右から左へのテキスト表示を修正する

LibreOffice Writerで、アラビア語またはヘブライ語のテキストが英語と正しく並ばず、位置がずれたり、混ざり合ったりする場合を修正します。複雑なテキストレイアウトを有効にし、段落の方向を設定して、結果を確認してください。

LibreOffice Calc VLOOKUP vs XLOOKUP: A Beginner-Friendly Functions Guide

LibreOffice Calc VLOOKUP vs XLOOKUP: A Beginner-Friendly Functions Guide

Learn VLOOKUP and XLOOKUP in LibreOffice Calc, including exact matches, left lookups, not-found results, reverse search, INDEX/MATCH alternatives, and common errors.

Collabora Onlineで「WOPI認証検証失敗」を修正する方法

Collabora Onlineで「WOPI認証検証失敗」を修正する方法

Collabora OnlineのWOPI認証検証エラーのトラブルシューティングを行うには、検出キー、キーローテーション、プロキシURL、タイムスタンプ、ホスト許可リストを確認してください。

ONLYOFFICE Docsで変更履歴をデフォルトで有効にする方法

ONLYOFFICE Docsで変更履歴をデフォルトで有効にする方法

ONLYOFFICEドキュメントで全員に対して変更履歴の記録を有効にし、再度開いた後もアクティブな状態を維持する方法、およびグローバルなデフォルト設定の制限事項を理解してください。

Collabora編集セッションのアイドルタイムアウトを設定する方法

Collabora編集セッションのアイドルタイムアウトを設定する方法

Collabora Onlineのビューごとのタイムアウト、フォーカスが外れた状態のタイムアウト、ドキュメントがアイドル状態のタイムアウト、自動保存のタイムアウト、プロキシのタイムアウトを比較し、導入環境に適した設定を選択して確認してください。