查看: 334|回复: 3

Python实现Word与PDF互转:docx2pdf、pdf2docx

[复制链接]
发表于 昨天 10:00 | 显示全部楼层 |阅读模式
在日常办公中,Word与PDF的格式互转是最常见的需求之一。合同存档需转PDF防篡改,PDF内容修改需转Word再编辑。利用Python脚本可以批量自动化处理这些任务,大幅提升效率。本文总结三种经过验证的实现方案,覆盖轻量级、高保真和跨平台场景,并提供完整代码与避坑指南。

一、Word转PDF:轻量级方案docx2pdf
docx2pdf库底层调用Microsoft Word的Office接口,能最大程度保留原排版(目录、页眉页脚等)。适合Windows环境下快速批量转换。

安装:pip install docx2pdf

示例代码:
  1. from docx2pdf import convert
  2. import os
  3. # 单个文件转换
  4. convert("report.docx", "report.pdf")
  5. # 批量转换整个文件夹
  6. input_folder = r"C:\待处理文档"
  7. output_folder = r"C:\已转PDF"
  8. if not os.path.exists(output_folder):
  9.     os.makedirs(output_folder)
  10. convert(input_folder)  # 默认在原路径生成PDF
  11. print("所有Word已转换为PDF")
复制代码

局限:依赖本地安装的Microsoft Word,Linux服务器或无Office环境无法使用。

二、Word转PDF:企业级稳定方案win32com
若需要在后台静默转换,或需要更精细的控制(如加密PDF),可以调用Word的COM接口。

安装:pip install pywin32

示例代码:
  1. import win32com.client
  2. import os
  3. def word_to_pdf(word_path, pdf_path):
  4.     word = win32com.client.Dispatch("Word.Application")
  5.     word.Visible = False  # 后台运行
  6.     doc = word.Documents.Open(os.path.abspath(word_path))
  7.     # FileFormat=17 代表 wdFormatPDF
  8.     doc.SaveAs2(os.path.abspath(pdf_path), FileFormat=17)
  9.     doc.Close()
  10.     word.Quit()
  11. word_to_pdf("合同草稿.docx", "合同正式稿.pdf")
复制代码

同样依赖于Word软件,但控制粒度更细,适合集成到企业级流程中。

三、PDF转Word:开源神器pdf2docx
pdf2docx 基于PyMuPDF解析PDF布局结构,重建为Word文档,对文字型PDF还原度高。

安装:pip install pdf2docx

示例代码:
  1. from pdf2docx import Converter
  2. pdf_file = "扫描件_纯文字版.pdf"
  3. docx_file = "还原后的文档.docx"
  4. cv = Converter(pdf_file)
  5. # start=0, end=None 表示转换全部页面,也可指定页码范围
  6. cv.convert(docx_file, start=0, end=None)
  7. cv.close()
  8. print("转换完成!请检查格式微调。")
复制代码

关键说明:
- 如果PDF是由Word直接导出的(文本型PDF),转换效果极佳,段落和表格基本能还原。
- 如果PDF是扫描仪生成的图片型PDF,pdf2docx无法直接识别文字,需要先引入OCR技术(如PaddleOCR)提取文字后再写入Word。

四、跨平台高保真方案:LibreOffice命令行
若需兼容复杂排版(分栏、艺术字、公式)或无法使用Microsoft Office,可通过LibreOffice的命令行实现企业级转换。LibreOffice是开源跨平台办公套件,需先安装。

示例代码(使用subprocess调用系统命令):
  1. import subprocess
  2. # Word转PDF
  3. subprocess.run([
  4.     "libreoffice", "--headless", "--convert-to", "pdf",
  5.     "--outdir", "output_folder", "input.docx"
  6. ])
  7. # PDF转Word(需LibreOffice 7.0+)
  8. subprocess.run([
  9.     "libreoffice", "--headless", "--convert-to", "docx",
  10.     "--outdir", "output_folder", "input.pdf"
  11. ])
复制代码

优势:跨平台(Windows/Linux/Mac)、无Office依赖、支持复杂排版。局限:需额外安装LibreOffice,初次配置稍复杂。

五、进阶建议与注意事项
1. 异常处理:批量转换时,务必加入 try-except 块,记录失败的文件名,避免程序因单个损坏文件崩溃。
2. 打包分发:若需要让非技术人员使用,可用 PyInstaller 将 .py 脚本打包成 .exe 可执行文件,免去Python环境安装。
3. GUI界面:结合 tkinter 或 PyQt 添加按钮和进度条,提升易用性。
4. 性能优化:对于大量文件,考虑多线程或异步处理。

选择哪种方案,取决于你的操作系统、是否需要Office许可、排版复杂度以及批量规模。建议先在小样本上测试效果,再投入正式流程。掌握这些代码,即可实现Word与PDF互转的自动化办公流。
回复

使用道具 举报

发表于 昨天 10:05 | 显示全部楼层

Re: Python实现Word与PDF互转:docx2pdf、pdf2docx

感谢楼主分享,内容很全面。我平时多用pdf2docx,对于文本型PDF还原度确实不错。另外补充一下:如果PDF中有复杂表格,有时需要手动微调。楼主的LibreOffice方案我也试过,跨平台很方便,但安装LibreOffice时注意版本,7.0以下可能不支持转docx。
回复 支持 反对

使用道具 举报

发表于 昨天 10:05 | 显示全部楼层

Re: Python实现Word与PDF互转:docx2pdf、pdf2docx

感谢楼主的详细整理!最近正好在找批量转换的方案,这篇对比很清晰,尤其是指出了不同环境下该选哪种工具。我之前试过pdf2docx转纯文字PDF效果确实不错,但遇到扫描件就抓瞎了,楼主提到的PaddleOCR思路很实用。另外LibreOffice方案之前没注意过,回头在Linux服务器上测试一下。请问楼主,用win32com做批量转换时,如果多个文件同时转会不会有资源冲突?
回复 支持 反对

使用道具 举报

发表于 昨天 10:05 | 显示全部楼层

Re: Python实现Word与PDF互转:docx2pdf、pdf2docx

感谢楼主分享这么详细的教程!几种方案的适用场景和优缺点都讲得很清楚,尤其是LibreOffice的跨平台方案对Linux用户非常友好。之前一直用win32com,经常被Office版本兼容性问题困扰,回头试试docx2pdf和LibreOffice。另外请教一下,对于既有文字又有图片的混合型PDF,pdf2docx配合OCR的流程大概怎么衔接?期待后续能有更深入的实战案例。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

指导单位

江苏省公安厅

江苏省通信管理局

浙江省台州刑侦支队

DEFCON GROUP 86025

Hacking Group 021A

旗下站点

态势感知中心

应急响应中心

红盟安全

联系我们

官方QQ群:112851260

官方邮箱:security#ihonker.org(#改成@)

官方核心成员

关注微信公众号

Archiver|手机版|小黑屋| ( 沪ICP备2021026908号 )

GMT+8, 2026-7-17 04:07 , Processed in 0.025965 second(s), 17 queries , Gzip On, Redis On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部