如何使用 LibreOffice 命令列批次將 DOCX 轉換為 PDF

如果您有幾十個 Word 文檔,逐一在 LibreOffice 中開啟並匯出既慢又容易中斷。雖然soffice --convert-to pdf可以使用類似 `libreOffice dpkg -f pdf ...

這些範例使用 LibreOffice 26.8 說明文件中記錄的當前 LibreOffice 命令列語法(2026 年 10 月 6 日更新)。它們使用writer_pdf_ExportWriter 文件的 PDF 匯出過濾器。轉換適用於普通的 DOCX 文件,但複雜的佈局仍需檢查,因為 LibreOffice 和 Microsoft Word 對某些字體和頁面佈局的渲染方式可能不同。

在轉換資料夾之前

在將要執行轉換的電腦上安裝 LibreOffice。在伺服器上,使用該系統的軟體套件管理器或安裝程序,並確認 LibreOfficesoffice可在命令列中使用。在 Windows 系統中,LibreOffice 的可執行檔通常位於 `/usr/local/lib` 目錄下C:\Program Files\LibreOffice\program\soffice.exe;安裝路徑可能有所不同。

準備兩個獨立的資料夾:一個用於存放來源 DOCX 文件,另一個用於存放轉換後的 PDF 文件。首先建立一個新的或空的輸出資料夾。如果轉換後的資料夾內已有同名 PDF 文件,LibreOffice 可能會詢問是否已覆蓋,或根據具體情況和環境,可能無法成功替換。將來源檔案和輸出檔案分開存放還可以防止腳本掃描目錄時出現意外的轉換循環。

對於使用非常規字體的文檔,請在轉換前安裝原作者使用的相同字體。即使 DOCX 檔案開啟時沒有報錯,缺少字體也可能導致換行符號、頁數、表格寬度和分頁格式變更。

1. 先測試一個 DOCX 檔。

在執行大規模批次之前,請先轉換一個代表性文件。在以下範例中,請將範例路徑替換為您自己的路徑:

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

--headless無需打開圖形介面即可運行 LibreOffice。--convert-to選擇輸出格式和可選過濾器,並--outdir指定目標位置。 LibreOffice 的過濾器表列出了writer_pdf_ExportWriter 輸出的 PDF 檔案。在轉換所有內容之前,請先檢查測試 PDF 檔案:檢查分頁符號、頁首和頁尾、表格、圖像、超連結和特殊字元。

如果測試未產生 PDF 文件,請確認來源路徑是否正確、文件是否可讀取以及輸出資料夾是否可寫入。同時,請檢查執行該指令的帳戶是否已安裝 LibreOffice。官方參考資料:LibreOffice 檔案轉換過濾器和LibreOffice 命令列參數。

2. 使用一條 Bash 指令轉換所有 DOCX 文件

在 Linux 或 macOS 系統中,開啟終端機中的 Bash 並使用檔案名稱模式。確保soffice該檔案位於您的系統目錄下PATH;在 macOS 系統中,您可能需要呼叫 LibreOffice 應用程式套件內的可執行檔。此範例直接處理單一輸入資料夾中的 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*.docx在啟動 LibreOffice 之前會將檔案參數拆分成單獨的檔案。由於每個路徑名都會作為單獨的參數傳遞,因此目錄名稱和檔案名稱中的空格會被保留。輸出的 PDF 檔案會保留原始檔案名稱的字幹,因此Annual Report.docx會變成Annual Report.pdf`.pdf`。該命令僅處理該資料夾中的文件,不會搜尋子資料夾。

首次運行時請使用空目標資料夾。在執行通配符指令之前,請檢查輸入資料夾是否包含目標文件,以及磁碟空間是否足以存放 PDF 檔案。在 Bash 中,未匹配的通配符會保持字面值,除非您配置了 shell 選項;如果資料夾可能為空,請先檢查是否存在至少一個 DOCX 文件,或使用下一節中的逐文件循環。

3. 對於大型資料夾,請使用循環或明確錯誤處理。

當資料夾包含數千個檔案時,shell 可能會拒絕過長的參數清單。循環可以避免在一條命令中將所有檔案名稱傳送給作業系統,並且在路徑用引號括起來時能夠安全地處理空格:

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循環可以處理檔案名稱中包含空格的情況,並且不會將整個檔案清單作為一個大參數發送。它會對每個檔案執行一次 LibreOffice 轉換,因此耗時可能比使用單一通配符命令更長。它僅掃描輸入資料夾內的檔案。要包含子資料夾,請使用遞歸文件搜索,並在輸出佈局中保留每個輸入資料夾;否則,兩個具有相同基本名稱的文件可能會產生衝突的 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 '; ')"
}

$soffice如果 LibreOffice 安裝在其他位置,則需要進行更改。 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"

使用可由運行轉換的帳戶寫入的設定檔目錄。不要同時針對相同設定檔執行兩個 LibreOffice 進程;每個並發工作進程應使用不同的設定檔。在測試完已安裝的版本和儲存設定之前,請保持自動化串行執行。

切勿在未決定如何處理現有 PDF 檔案的情況下,將轉換結果直接匯出到生產資料夾。請備份或移動之前的匯出結果,或將其寫入一個帶有時間戳記的新目錄。批次匯出不應靜默替換已簽署、已核准或已審核的 PDF 檔案。

6. 排查常見的批次轉換故障

  • 沒有輸出檔:請檢查輸入 glob 模式或 PowerShell 篩選器,用引號括起包含空格的路徑,並確認輸出目錄存在且可寫入。再次執行單一檔案測試,以區分路徑問題和批次問題。
  • 命令已退出,但部分文件缺失:請檢查終端輸出和退出狀態,然後將來源文件清單與生成的 PDF 文件進行比較。損壞或受密碼保護的 DOCX 檔案可能需要在轉換前進行修復或手動開啟。
  • LibreOffice 卡死或提示設定檔已鎖定:請關閉所有 LibreOffice 互動式進程,或使用專用-env:UserInstallation設定檔重試。請勿在 LibreOffice 使用設定檔時刪除設定檔目錄。
  • 字體和頁碼可能與 Word 不同:請安裝所需字體,並將範例 PDF 檔案與原件進行比較。對於合約中對 Word 文件的精確渲染有嚴格要求的文檔,請在編輯軟體或經認可的渲染服務中驗證佈局。
  • 現有 PDF 檔案保持不變:將其轉換為空輸出資料夾,並確認命令指向該資料夾。切勿想當然地認為重新執行批次作業總是會覆蓋先前的 PDF 檔案。

LibreOffice 也接受在篩選器名稱後新增 PDF 匯出選項,例如頁面範圍或輔助功能相關設定。當所有文件都應具有相同的匯出行為時,這些選項非常有用,但請在將其應用於批次文件之前,先在樣本文件上進行測試。請參閱官方的PDF 匯出命令列參數。

7. 核實已完成的批次

不要僅以命令是否返回提示符號來判斷是否成功。比較來源 DOCX 檔案數量和輸出資料夾中 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 中插入複選框:兩種簡易方法

如何在 Excel 中插入複選框:兩種簡易方法

學習如何使用儲存格內工具在 Excel 中插入複選框,使用公式計算選取項目的數量,或在舊版桌面 Excel 中新增連結的表單控制項。

如何在 Excel 中自動填充字母:從 A 到 Z 及其他

如何在 Excel 中自動填充字母:從 A 到 Z 及其他

使用填充柄公式、SEQUENCE 或可重複使用的自訂清單在 Excel 中產生 A 到 Z、小寫字母或 Z 以上的標籤。

如何在 Excel 中新增刪除線:快捷鍵和逐步指南

如何在 Excel 中新增刪除線:快捷鍵和逐步指南

學習如何在 Windows、Mac 和網頁版 Excel 中新增刪除線、設定儲存格部分格式以及刪除線條而不刪除其值。

什麼是 Microsoft Access?它的資料庫工具是如何運作的?

什麼是 Microsoft Access?它的資料庫工具是如何運作的?

Microsoft Access 是一款 Windows 資料庫應用程序,用於儲存相關記錄、建立查詢、建立資料輸入表單和產生報表。了解它的工作原理以及適用場景。

如何在 Word 2010 中變更網格線高度和寬度

如何在 Word 2010 中變更網格線高度和寬度

了解如何在 Word 2010 中調整網格線高度和寬度、變更可見線頻率以及設定底層水平和垂直繪圖網格間距。

Office Outlook 2010 匯入和匯出:使用 PST 檔案移動數據

Office Outlook 2010 匯入和匯出:使用 PST 檔案移動數據

了解如何將 PST 檔案匯入 Outlook 2010 或匯出郵件、聯絡人、行事曆和任務。按照正確的選單操作,避免遺漏資料夾或重複文件。

使用 Nucleus Kernel 還原 Outlook PST 密碼

使用 Nucleus Kernel 還原 Outlook PST 密碼

使用 Kernel 的目前步驟還原忘記的 Outlook PST 密碼,包括如何識別正確的檔案、進行備份以及檢查工具的限制。

如何在 PowerPoint 幻燈片中插入網頁鏈接

如何在 PowerPoint 幻燈片中插入網頁鏈接

使用 LiveWeb 外掛程式將網站放置在 PowerPoint 投影片上,設定其大小和刷新行為,並在簡報前檢查相容性。

如何在 Word 2010 中變更預設字體和正文樣式

如何在 Word 2010 中變更預設字體和正文樣式

在 Word 2010 中設定預設字體、字號和文字效果,將選擇儲存到 Normal.dotm,然後修改 Normal 樣式以用於以後的文件。