在Python中,将Word文档(.docx
或.doc
)转换为PDF可以通过多种库实现。以下是几种常见的方法及详细步骤:
方法1:使用 python-docx
+ comtypes
(仅Windows,需安装Word)
适用于Windows系统,依赖本地安装的Microsoft Word。
python
import comtypes.client
def docx_to_pdf(input_path, output_path):
word = comtypes.client.CreateObject("Word.Application")
doc = word.Documents.Open(input_path)
doc.SaveAs(output_path, FileFormat=17) # 17是PDF格式的代码
doc.Close()
word.Quit()
# 示例
docx_to_pdf("input.docx", "output.pdf")
注意:
- 仅支持Windows且需安装Microsoft Word。
- 需安装
comtypes
库:pip install comtypes
。
方法2:使用 docx2pdf
(跨平台,推荐)
基于libreoffice
或unoconv
的封装,支持跨平台(Windows/macOS/Linux)。
python
from docx2pdf import convert
# 单文件转换
convert("input.docx", "output.pdf")
# 批量转换整个文件夹
convert("input_folder/", "output_folder/")
安装:
bash
pip install docx2pdf
依赖:
- Windows:需安装Microsoft Word或LibreOffice。
- macOS/Linux:需安装LibreOffice(
sudo apt install libreoffice
)。
方法3:使用 pywin32
(仅Windows,类似comtypes
)
与comtypes
类似,但使用pywin32
库。
python
import win32com.client
def docx_to_pdf(input_path, output_path):
word = win32com.client.Dispatch("Word.Application")
doc = word.Documents.Open(input_path)
doc.SaveAs(output_path, FileFormat=17)
doc.Close()
word.Quit()
# 示例
docx_to_pdf("input.docx", "output.pdf")
安装:
bash
pip install pywin32
方法4:使用 unoconv
(Linux优先)
依赖LibreOffice的命令行工具unoconv
。
python
import subprocess
def docx_to_pdf(input_path, output_path):
subprocess.run(["unoconv", "-f", "pdf", "-o", output_path, input_path])
# 示例
docx_to_pdf("input.docx", "output.pdf")
安装:
bash
# Linux
sudo apt install unoconv
# macOS
brew install unoconv
方法5:使用 Aspose.Words
(付费库,功能强大)
适用于企业级应用,支持高级格式转换。
python
import asposewords as aw
doc = aw.Document("input.docx")
doc.save("output.pdf", aw.SaveFormat.PDF)
安装:
bash
pip install aspose-words
注意事项
- 跨平台兼容性 :
- 推荐
docx2pdf
(需LibreOffice)或python-docx
+comtypes
(仅Windows)。
- 推荐
- 格式保真 :
- 复杂格式(如表格、图表)建议使用
docx2pdf
或Aspose.Words
。
- 复杂格式(如表格、图表)建议使用
- 无头模式 :
-
Linux服务器可配置LibreOffice的无头模式:
bashlibreoffice --headless --convert-to pdf *.docx
-
完整示例(推荐docx2pdf
)
python
from docx2pdf import convert
def convert_word_to_pdf(input_file, output_file):
try:
convert(input_file, output_file)
print(f"转换成功:{output_file}")
except Exception as e:
print(f"转换失败:{e}")
# 使用示例
convert_word_to_pdf("report.docx", "report.pdf")
选择方法时,请根据操作系统、依赖环境和需求(如批量转换、格式复杂度)决定。