在工作中,經常會遇到需要把 Word 文檔轉換成 PDF 的情況。比如生成報表、分發文檔、或者做歸檔保存,PDF 格式在排版和跨平臺顯示上更穩定。
傳統的做法往往依賴 Microsoft Office 或 LibreOffice 等軟件來完成轉換,但在自動化環境(如服務器、Docker 容器、Linux 系統)中,這類方式會遇到一些限制:需要額外安裝軟件、依賴復雜,甚至存在兼容性問題。
因此,很多開發者更希望使用無依賴的 Python 庫來完成轉換。本文將介紹如何借助 Spire.Doc for Python庫,在不依賴 Office 的情況下,實現 doc 轉 pdf、docx 轉 pdf,并支持批量轉換與多種轉換設置。
一、安裝 Spire.Doc for Python
在使用之前,需要先安裝庫。可以直接使用以下 pip 命令來安裝:
pip?install?spire-doc
安裝完成后,就可以在 Python 代碼中使用 from spire.doc import *
?導入該庫的模塊來處理和轉換 Word 文檔。
二、Python Word 轉 PDF 基本示例
下面是 Word 轉 PDF 一個最基礎的示例。只需要兩步:加載文件、保存為 PDF。
from?spire.doc?import?*#?創建文檔對象
doc?=?Document()#?加載?Word?文件
doc.LoadFromFile("input.docx")#?轉換并保存為?PDF
doc.SaveToFile("output.pdf",?FileFormat.PDF)#?關閉文檔,釋放資源
doc.Close()
代碼說明:
Document()
:創建一個 Word 文檔對象。LoadFromFile("input.docx")
:加載指定路徑的 Word 文件。SaveToFile("output.pdf", FileFormat.PDF)
:將文檔保存為 PDF 格式。Close()
:關閉文檔,釋放資源。
三、批量轉換 Word 文檔為 PDF
如果有大量 Word 文件需要轉換,可以將它們放在一個目錄下,然后遍歷目錄并批量轉換。以下是具體的代碼示例:
import?os
from?spire.doc?import?*input_dir?=?"word_files"
output_dir?=?"pdf_files"
os.makedirs(output_dir,?exist_ok=True)for?file?in?os.listdir(input_dir):if?file.endswith(".doc")?or?file.endswith(".docx"):doc?=?Document()doc.LoadFromFile(os.path.join(input_dir,?file))pdf_path?=?os.path.join(output_dir,?file.rsplit(".",?1)[0]?+?".pdf")doc.SaveToFile(pdf_path,?FileFormat.PDF)doc.Close()
代碼說明:
os.listdir(input_dir)
:遍歷文件夾中的所有文件。file.endswith(".doc") or file.endswith(".docx")
:只處理 Word (.doc 或 .docx)文件。os.makedirs(output_dir, exist_ok=True)
:如果目標文件夾不存在,則自動創建。- 每次處理完一個文檔后調用
Close()
,避免內存占用過多。
四、轉換設置與優化
在不同的應用場景下,生成的 PDF 可能需要不同的屬性,例如文件體積更小、排版更精細、符合歸檔標準等。Spire.Doc for Python 提供了可調節的參數來滿足這些需求。
1. 圖片優化(減小 PDF 大小)
#?將圖像壓縮到原始質量的40%
doc.JPEGQuality?=?40#?保留原始圖像質量 (圖片質量參數:0-100)
#?doc.JPEGQuality?=?100
這樣可以有效減小 PDF 文件大小,適合包含大量圖片的 Word 文檔。
2. 字體嵌入處理(避免亂碼)
#?創建?ToPdfParameterList?類的對象
parameter?=?ToPdfParameterList()#?將字體嵌入到生成的PDF中
parameter.IsEmbeddedAllFonts?=?True#?將文檔保存為PDF
document.SaveToFile("output.pdf",?parameter)
避免目標設備缺少字體時,導致 PDF 顯示異常。
3. PDF/A 合規標準
#?創建?ToPdfParameterList?類的對象
parameters?=?ToPdfParameterList()#?設置?PDF/A?合規標準
parameters.PdfConformanceLevel?=?PdfConformanceLevel.Pdf_A1A#?將文檔保存為?PDF/A-1a?文件
document.SaveToFile("output.pdf",?parameters)
用于生成符合 PDF/A 標準的文件,常用于檔案歸檔。
4. 加密與權限控制
#?創建?ToPdfParameterList?類的對象
parameter?=?ToPdfParameterList()#?設置打開密碼和權限密碼,并用其保護生成的?PDF?文件
openPsd?=?"abc123"
permissionPsd?=?"E-iceblue"
parameter.PdfSecurity.Encrypt(openPsd,?permissionPsd,?PdfPermissionsFlags.Default,?PdfEncryptionKeySize.Key128Bit)#?將文檔保存為加密的PDF
document.SaveToFile("output.pdf",?parameter)
可以為 PDF 設置打開密碼,并限制打印、復制等操作。
五、異常處理
import?os
from?spire.doc?import?*input_dir?=?"word_files"
output_dir?=?"pdf_files"
os.makedirs(output_dir,?exist_ok=True)for?file?in?os.listdir(input_dir):if?file.endswith(".doc")?or?file.endswith(".docx"):try:doc?=?Document()doc.LoadFromFile(os.path.join(input_dir,?file))pdf_path?=?os.path.join(output_dir,?file.rsplit(".",?1)[0]?+?".pdf")doc.SaveToFile(pdf_path,?FileFormat.PDF)print(f"成功轉換:?{file}?→?{pdf_path}")except?Exception?as?e:print(f"轉換失敗:?{file},?錯誤信息:?{str(e)}")finally:if?'doc'?in?locals():doc.Close()
代碼說明:
try ... except ... finally
:保證即使出錯,程序也能繼續執行。print(f"...")
:方便輸出日志,便于排查問題。finally
?確保即使出錯,也會關閉文檔,避免內存泄漏。
六、適用場景
- 自動化報表生成:將 Word 報表定時轉換為 PDF。
- 文檔歸檔:統一轉換為 PDF/A,方便長期保存。
- 在線服務:搭建“上傳 Word → 下載 PDF”的 Web 接口。
- 批量處理:快速將大量 Word 文件轉換為 PDF,提升工作效率。
七、總結
本文介紹了在 Python 中使用 Spire.Doc 實現 Word 文檔到 PDF 的轉換方法。通過實例演示了:
- 單文件和批量文件的轉換流程;
- 轉換過程中可配置的參數,如圖像壓縮、字體嵌入、PDF/A 合規性和加密設置;
- 異常處理與資源釋放的注意事項,確保在批量或自動化場景下程序穩定運行。
總體來看,利用 Spire.Doc 可以在不依賴 Office 的環境中完成高效、穩定的 Word 到 PDF 轉換,并且轉換選項靈活,可根據具體需求調整。上述方法適合在報表生成、文檔歸檔或在線文檔處理等場景中應用。