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 のコマンドラインワークフローでは、繰り返し行う手動エクスポートが不要になり、別の検証パスによって、自動化では確実に判断できないレイアウトやファイルレベルの問題を検出できます。

コメントを残す

Microsoft Wordで画像を移動する方法

Microsoft Wordで画像を移動する方法

Wordで画像をドラッグする方法、テキストの折り返しを選択する方法、段落内に画像を保持する方法、ページ上に画像を固定する方法、そして画像が移動しない場合のトラブルシューティング方法を学びましょう。

Excelにチェックボックスを挿入する方法:2つの簡単な方法

Excelにチェックボックスを挿入する方法:2つの簡単な方法

Excelのセル内ツールを使ってチェックボックスを挿入する方法、数式を使ってチェックされた項目の数を数える方法、古いデスクトップ版でリンクされたフォームコントロールを追加する方法を学びましょう。

Excelで文字を自動入力する方法:AからZ、そしてその先へ

Excelで文字を自動入力する方法:AからZ、そしてその先へ

Excelでフィルハンドル関数、SEQUENCE関数、または再利用可能なカスタムリストを使用して、AからZまでのアルファベット、小文字、またはZを超えるラベルを生成します。

Excelで取り消し線を引く方法:ショートカットと手順

Excelで取り消し線を引く方法:ショートカットと手順

Windows、Mac、Web版Excelで取り消し線を引く方法、セルの一部に書式を設定する方法、値を削除せずに行を削除する方法を学びましょう。

Microsoft Accessとは?そのデータベースツールはどのように機能するのか?

Microsoft Accessとは?そのデータベースツールはどのように機能するのか?

Microsoft Accessは、関連レコードの保存、クエリの作成、データ入力フォームの作成、レポートの生成を行うためのWindowsデータベースアプリケーションです。その仕組みと最適な活用シーンについて解説します。

Word 2010でグリッド線の高さと幅を変更する

Word 2010でグリッド線の高さと幅を変更する

Word 2010でグリッド線の高さと幅を調整する方法、表示される線の頻度を変更する方法、および下地となる水平方向と垂直方向の描画グリッドの間隔を設定する方法を学びましょう。

Office Outlook 2010 のインポートとエクスポート: PST ファイルを使用してデータを移動する

Office Outlook 2010 のインポートとエクスポート: PST ファイルを使用してデータを移動する

Outlook 2010にPSTファイルをインポートする方法、またはメール、連絡先、カレンダー、タスクをエクスポートする方法を学びましょう。正しいメニューに従い、フォルダの欠落や重複を避けてください。

Nucleus Kernelを使用してOutlook PSTファイルのパスワードを復元する

Nucleus Kernelを使用してOutlook PSTファイルのパスワードを復元する

Kernelが提供する最新の手順では、忘れてしまったOutlook PSTファイルのパスワードを復元する方法を解説します。正しいファイルの特定方法、バックアップの作成方法、ツールの制限事項の確認方法などが含まれています。

PowerPointスライドにライブWebページを挿入する方法

PowerPointスライドにライブWebページを挿入する方法

LiveWebアドインを使用すると、WebサイトをPowerPointスライドに配置し、サイズや更新動作を設定し、プレゼンテーション前に互換性を確認できます。

Access 2010データベースをフォームで開く方法

Access 2010データベースをフォームで開く方法

Access 2010データベースアプリケーションを、データ入力フォームに直接開くように設定し、オブジェクトリストを非表示にし、メニューを制限し、共有前に設定を確認します。