LibreOffice CLI を使用して DOCX ファイルを PDF に一括変換する

Word ファイルが入ったフォルダがある場合、LibreOffice は 1 つのコマンドでそれらを変換できます。DOCX ファイルが入っているフォルダから、空の出力フォルダを作成し、コマンドを実行しますlibreoffice --headless --convert-to pdf:writer_pdf_Export --outdir pdf *.docx。これにより、Writer の PDF エクスポート フィルターが使用され、元のファイルはそのまま残ります。

新しい出力フォルダを使用し、LibreOfficeがインストールされていることを確認し、コマンドが正常に終了したからといってすべてのページが正しく表示されていると決めつけるのではなく、生成されたPDFファイルを実際に確認してください。コマンドラインは実用的なバッチツールであり、Microsoft Wordと全く同じページ番号付けを保証するものではなく、破損した文書を修復するものでもありません。

簡単なバッチ変換を実行します

Linuxでは、ファイルが含まれているディレクトリでターミナルを開きます。まず出力ディレクトリを作成してください。

mkdir -p pdf
libreoffice --headless --convert-to pdf:writer_pdf_Export --outdir pdf *.docx

--headless通常のデスクトップウィンドウを開かずに実行されます。--convert-to出力形式として PDF を選択し、writer_pdf_ExportLibreOffice の Writer PDF エクスポートフィルターに名前を付け、--outdir pdf結果をpdfフォルダーに送信します。LibreOffice が起動する前に、シェルが一致するファイルを展開します。LibreOffice は、コマンドラインパラメーターのリファレンスとファイル変換フィルターリスト*.docxで、この変換構文とフィルター名について説明しています。

Linuxターミナルに、DOCXファイルをPDFに変換するLibreOfficeバッチコマンドと、生成されたPDFの一覧が表示されます。
WriterのPDFエクスポートフィルターを使用して、少量のDOCXファイルをLibreOfficeに送信した後のターミナル出力例。

適切なバッチパターンを選択してください

ワイルドカードコマンドは、すべての DOCX ファイルが 1 つの入力フォルダ内に直接存在する場合に最適です。子フォルダは検索されません。Linux では、パターンはデフォルトで大文字と小文字を区別するため、*.docx末尾が . のファイルはスキップされる場合があります.DOCX。シェルがパターンが一致しなかったと報告した場合は、コマンドを変更する前にファイルの一覧を表示し、拡張子を確認してください。

サブフォルダーにネストされたドキュメントの場合、ループを使用することでディレクトリ構造を維持し、2つのフォルダーに同じ名前のファイルが含まれている場合の衝突を回避できます。inputソースツリーとpdf別の宛先ツリーを設定します。

input="$PWD/input"
output="$PWD/pdf"
profile="file:///tmp/lo-batch-profile"

find "$input" -type f -iname '*.docx' -print0 |
while IFS= read -r -d '' file; do
  rel="${file#"$input"/}"
  dest="$output/$(dirname "$rel")"
  mkdir -p "$dest"
  libreoffice --headless \
    -env:UserInstallation="$profile" \
    --convert-to pdf:writer_pdf_Export \
    --outdir "$dest" "$file"
done

-print0また、read -d ''一致するファイルはファイル名内のスペースやほとんどの特殊文字を安全に処理します。プロファイルを分けることで、このバッチ ジョブが同じユーザー プロファイルを使用するデスクトップ LibreOffice セッションと競合するのを防ぎます。LibreOffice の起動リファレンス ドキュメントを-env:UserInstallation参照してください。2 つの変換ジョブが同時に実行される可能性がある場合は、一意のプロファイル パスを使用してください。検索が以前の結果に迷い込まないように、出力ツリーを入力ツリーの外に置いてください。

Linuxターミナルには、ネストされたフォルダから対応するPDF出力フォルダにドキュメントを送信する、findベースのループが表示されます。
各ソースフォルダの横にあるpdfサブフォルダにPDFを書き込む再帰的な検索ループの例。これにより、異なるフォルダにある同名のファイルが分離されます。

LibreOfficeが既に開いている場合

コマンドはファイルを作成せずに終了したように見える場合や、既存の LibreOffice プロセスに接続している場合があります。実行中のデスクトップ インスタンスには、デフォルトのユーザー プロファイルが保持されている-env:UserInstallation可能性があります。LibreOffice を閉じて再試行してください。無人実行ジョブの場合、再帰の例にある isolated オプションは有効な安全策となります。同時実行される各ジョブに独自のプロファイル ディレクトリを割り当て、いずれかのジョブが終了するまでそのディレクトリを再利用しないでください。

コマンドに と表示された場合はlibreoffice: command not found、オペレーティングシステムのサポートされているパッケージソースから LibreOffice をインストールするか、実行可能ファイルのフルパスを使用してください。Windows PowerShell では、単純な非再帰バッチを次のように記述できます。

$src = (Resolve-Path .).Path
$out = Join-Path $src 'pdf'
New-Item -ItemType Directory -Force -Path $out | Out-Null
$soffice = "$env:ProgramFiles\LibreOffice\program\soffice.exe"
Get-ChildItem -File -Filter *.docx | ForEach-Object {
  & $soffice --headless --convert-to pdf:writer_pdf_Export --outdir $out $_.FullName
}

LibreOfficeが別の場所にインストールされている場合は、適宜調整してください$soffice。ソースフォルダからコマンドを実行し、新しい出力フォルダを使用します。PowerShellは、Get-ChildItem -File再帰が要求されない限り、そのフォルダのみを検索します。再帰的なジョブでは、各ソースパスに対応する出力先フォルダを作成するループが必要です。

結果に影響を与える要因は何ですか?

PDF変換ではLibreOfficeが解釈できるレイアウトが保持されますが、WordとLibreOfficeでは必ずしも文書のページ番号が一致するとは限りません。フォントの欠落、サポートされていない埋め込みオブジェクト、変更履歴、フィールド、複雑な表などがあると、改行やページ数がずれることがあります。一貫したタイポグラフィを維持するには、変換前に文書に必要なフォントをインストールしてください。保護されたファイルやパスワードで暗号化されたファイルは、認証情報を使用して開くか、手動で処理する必要がある場合があります。また、他のファイルが変換できたとしても、破損したDOCXファイルは変換に失敗する可能性があります。

同じ名前の重要な PDF ファイルが格納されているフォルダに、バッチ処理を繰り返し実行しないでください。クリーンな保存先を使用するか、既存の出力ファイルを先にバックアップしてください。特に重要なファイルがある場合は、PDF を使用する前に LibreOffice Writer で開いて確認してください。Microsoft Word の正確なページネーションが契約上の要件である場合、LibreOffice は適切なレンダラーではない可能性があります。必要なレイアウトを定義するアプリケーションで、代表的なサンプルと比較してください。

Linuxターミナルには、PDFエクスポート前に、LibreOfficeがヘッドレスモードで実行され、別のUserInstallationプロファイルが使用されていることが表示されます。
無人変換実行のために別のLibreOfficeユーザープロファイルを使用するコマンド例。

出力結果を共有する前に確認してください。

まず、ソースファイルの数とPDFファイルの数を比較します。Linuxでは、以下のコマンドでフラットフォルダ内のファイル数をカウントできます。

find . -maxdepth 1 -type f -iname '*.docx' | wc -l
find pdf -maxdepth 1 -type f -iname '*.pdf' | wc -l

再帰変換の場合は、入力ツリーと出力ツリー全体でカウントを比較してください。カウントが一致することは有用なスクリーニングであり、品質保証ではありません。破損したドキュメントや上書きされた重複ファイルなど、確認が必要な箇所が残っている場合があります。ターミナルログでエラーを確認し、想定されるファイル名が宛先に正しく表示されていることを確認してください。

PDFビューアで代表的なPDFファイルを検査してください。最初のページと最後のページ、ページ数、余白、表、ヘッダーとフッター、画像、および重要な改ページを確認してください。pdfinfoインストールされている場合は、pdfinfo pdf/Report.pdfページ数やページサイズなどのメタデータを提供しますが、視覚的な忠実度は評価しません。不足しているフォントのインストールや出力ディレクトリの変更など、特定の問題を修正した後でのみ再変換し、影響を受けたPDFファイルを再度確認してください。

Linuxターミナルに、変換されたPDFファイルのページ数、ページサイズ、ファイルサイズを示すpdfinfoの出力が表示されます。
ページ数や用紙サイズなどのPDFメタデータを表示する検証画面の例。

バッチ処理は、必要なすべてのPDFファイルが存在し、エラーなく開き、重要なページが意図したレイアウトを維持している場合に完了です。長いアーカイブの場合は、元のDOCXファイルと変換ログを保持しておくと、個々のエラーを追跡して、無関係な出力を置き換えることなく再実行できます。

コメントを残す

LibreOffice PDFを作成する際に、使用したフォントを保持する

LibreOffice PDFを作成する際に、使用したフォントを保持する

LibreOffice Writerで作成したPDFファイル内の欠落または置換されたフォントを修正し、適切なエクスポートプロファイルを選択し、共有前に埋め込まれているフォントを確認してください。

LibreOffice CLI を使用して DOCX ファイルを PDF に一括変換する

LibreOffice CLI を使用して DOCX ファイルを PDF に一括変換する

LibreOfficeのコマンドを使用して、Word文書のフォルダをPDFに変換し、ネストされたフォルダを安全に処理し、共有前に出力結果を確認します。

すべての新規ライター文書にテンプレートを使用させる

すべての新規ライター文書にテンプレートを使用させる

LibreOffice Writerのカスタムテンプレートをデフォルトとして設定すると、新しいドキュメントが好みのスタイルとページレイアウトで開くようになります。

LibreOfficeにJavaランタイムを認識させる方法

LibreOfficeにJavaランタイムを認識させる方法

互換性のあるJavaランタイムをインストールし、LibreOfficeで有効にして、無関係な設定を変更せずにJREリストが空になる問題をトラブルシューティングします。

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接続ファイルを保存し、一般的なアクセスエラーのトラブルシューティングを行ってください。