news 2026/7/14 4:40:05

Python办公自动化:调用Word实现批量DOC转PDF,保留原格式,一键搞定!

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python办公自动化:调用Word实现批量DOC转PDF,保留原格式,一键搞定!

前言:前面两篇文章我们分别实现了 PDF转图片 和 PPT转PDF,今天带来办公自动化三部曲的最后一环——Word批量转PDF。

你是否遇到过这些场景:

  • 收集了十几个同事的Word文档,需要统一转成PDF发给客户(防止排版错乱);

  • 论文、标书需要以PDF格式提交,但Word版本众多,一个个打开另存为太耗时;

  • 希望保留Word中的书签、目录结构,PDF中能自动生成导航。

今天我就用 Python 的pywin32(调用 Microsoft Word 的 COM 接口)来快速实现批量转换,不仅保留原始排版,连书签都能完美带过来。而且代码完全动态路径,放在任何文件夹都能直接运行。

目录

一、安装依赖库

1.1 实现原理

二、 代码逐段精讲

2.1 动态路径——用完即走,无需配置

2.2 核心转换函数 ExportAsFixedFormat

2.3跳过已存在的 PDF

三、避坑指南

🎯 总结


一、安装依赖库

左下角打开Python终端,使用阿里云镜像快速安装:

pip install pywin32 -i https://mirrors.aliyun.com/pypi/simple/

pywin32是 Python 调用 Windows API 和 COM 组件的桥梁,我们通过它来控制 Word 应用程序。

1.1 实现原理

# -*- coding: utf-8 -*- ''' Python批量将Word文件(DOC/DOCX)转为PDF文件 功能:自动识别当前目录下所有Word文档,调用本地Word转为PDF ''' #pip install pywin32 -i https://mirrors.aliyun.com/pypi/simple/ 安装包 import os #导入内置系统的模块,用来遍历文件架里的所有文件。 from win32com.client import Dispatch, constants, gencache #导入第三方软件库的工具 def doc2pdf(word_file, pdf_file): ''' 单个Word转PDF word_file: Word文件完整路径 pdf_file: 输出PDF完整路径 ''' word = gencache.EnsureDispatch('Word.Application') doc = word.Documents.Open(word_file, ReadOnly=1) # 导出为PDF(关键参数) doc.ExportAsFixedFormat(pdf_file, constants.wdExportFormatPDF, Item=constants.wdExportDocumentWithMarkup, CreateBookmarks=constants.wdExportCreateHeadingBookmarks) word.Quit(constants.wdDoNotSaveChanges) print(f'✅ 转换成功:{os.path.basename(word_file)} → {os.path.basename(pdf_file)}') def convert_word_in_folder(input_dir, output_dir): ''' 批量转换文件夹内所有Word文档 input_dir: 包含Word文件的目录 output_dir: PDF输出目录 ''' if not os.path.exists(input_dir): print(f'❌ 输入目录不存在:{input_dir}') return files = os.listdir(input_dir) # 不区分大小写过滤 .doc 和 .docx word_files = [f for f in files if f.lower().endswith((".doc", ".docx"))] if not word_files: print('❌ 未找到任何Word文档(.doc 或 .docx)') return os.makedirs(output_dir, exist_ok=True) print(f'📂 找到 {len(word_files)} 个Word文件,开始转换...') for word_file in word_files: full_input = os.path.join(input_dir, word_file) base_name = os.path.splitext(word_file)[0] + ".pdf" full_output = os.path.join(output_dir, base_name) # 跳过已存在的PDF(避免重复转换) if os.path.exists(full_output): print(f'⏭️ 已跳过(文件已存在):{base_name}') continue try: doc2pdf(full_input, full_output) except Exception as e: print(f'❌ 转换 {word_file} 时出错:{e}') print('🎉 所有Word文档转换完成!') if __name__ == "__main__": # ---------- 全部使用动态路径 ---------- script_dir = os.path.dirname(os.path.abspath(__file__)) # 输入目录:默认使用脚本所在目录(把你的Word文档放这里) docpath = script_dir # 输出目录:在脚本所在目录下新建 'pdf_output' 文件夹 pdfpath = os.path.join(script_dir, 'pdf_output') convert_word_in_folder(docpath, pdfpath)

二、 代码逐段精讲

2.1 动态路径——用完即走,无需配置

script_dir = os.path.dirname(os.path.abspath(__file__)) docpath = script_dir pdfpath = os.path.join(script_dir, 'pdf_output')

还是老规矩,脚本在哪,它就在哪工作。输出的 PDF 统一放在pdf_output子文件夹,干净整洁。

2.2 核心转换函数ExportAsFixedFormat

doc.ExportAsFixedFormat(pdf_file, constants.wdExportFormatPDF, Item=constants.wdExportDocumentWithMarkup, CreateBookmarks=constants.wdExportCreateHeadingBookmarks)

这是 Word 自带的导出方法,参数含义:

  • wdExportFormatPDF:输出 PDF 格式(值=17)

  • Item=wdExportDocumentWithMarkup:导出包含批注的文档(可改为wdExportDocumentContent只导正文)

  • CreateBookmarks=wdExportCreateHeadingBookmarks:为标题自动生成书签(PDF 左侧导航栏)

你甚至可以改为constants.wdExportFormatXPS输出 XPS 格式,灵活多变。

2.3跳过已存在的 PDF

if os.path.exists(full_output): print(f'⏭️ 已跳过(文件已存在):{base_name}') continue

如果中途运行中断,再次执行时不会重复转换,省时省力。


三、避坑指南

ImportError: No module named win32com.client

原因pywin32未安装或安装不完整。

解决方案:重新安装:

pip install --upgrade pywin32 -i https://mirrors.aliyun.com/pypi/simple/

然后重启 Python 环境

🎯 总结

通过不到 60 行 Python 代码,我们利用系统自带的 Microsoft Word 实现了 Word 批量转 PDF。它:

  • ✅ 完美保留原文档格式(字体、段落、表格、图片)

  • ✅ 自动生成书签,方便 PDF 导航

  • ✅ 动态路径,随放随用

  • ✅ 支持.doc.docx双格式

至此,我们完成了办公自动化文档转换三部曲

  1. PDF → 图片(PyMuPDF)

  2. PPT → PDF(comtypes)

  3. Word → PDF(pywin32)

三篇文章相辅相成,覆盖了日常办公最常用的文档格式转换需求。赶紧收藏备用吧!

如果运行中遇到任何问题(特别是环境配置相关的报错),欢迎在评论区留言,我会第一时间解答。

如果觉得有帮助,请点赞、收藏、转发三连支持一下~🙏

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/14 4:35:31

C++性能优化利器:spdlog stopwatch实现0.1毫秒级精准测量

1. 项目概述:为什么我们需要0.1毫秒级的性能测量?在C的世界里,性能优化从来都不是一句空话。无论是高频交易系统里一个订单的处理延迟,还是游戏引擎中一帧画面的渲染时间,甚至是后台服务处理一个请求的耗时&#xff0c…

作者头像 李华
网站建设 2026/7/14 4:34:23

MySQL——表的操作(增删改查详细版)

MySQL——表的操作(增删改查详细版) 文章摘要:本文详细介绍了 MySQL 数据库中表的五大核心操作:查看所有表、创建表、查看表结构、修改表(包括添加列、修改列、重命名列、删除列、修改表名)以及删除表。每…

作者头像 李华
网站建设 2026/7/14 4:33:34

TB67H480FNG与STM32F334R8组合在电机控制中的应用

1. 为什么选择TB67H480FNG与STM32F334R8组合?在电机控制和嵌入式系统开发领域,硬件选型往往直接决定项目的性能上限和开发效率。TB67H480FNG是东芝(现为Kioxia)推出的一款高性能双极步进电机驱动IC,而STM32F334R8则是S…

作者头像 李华
网站建设 2026/7/14 4:32:43

GitZip Pro 源码解析:一个 GitHub 文件/文件夹下载扩展是如何工作的(三)URL 解析与 GitHub API 请求

项目地址:fthux/GitZipPro。本文继续从源码角度拆解 GitZip Pro 的下载器实现。 上一篇分析了 content.js 如何进入 GitHub 页面、扫描文件列表并维护选中项。页面层最终会把一个 selectedItems 传给下载器。这个 selectedItems 里保存的是 GitHub 文件或目录链接。…

作者头像 李华
网站建设 2026/7/14 4:30:48

锂离子电池过压保护与BQ2920芯片应用设计

1. 锂离子电池过压保护的必要性与设计挑战锂离子电池因其能量密度高、循环寿命长等优势,已成为现代电子设备的首选电源方案。但这类电池对工作电压极为敏感——以常见的钴酸锂电池为例,其充电截止电压通常为4.2V50mV。当过充发生时,正极材料中…

作者头像 李华
网站建设 2026/7/14 4:29:03

基于QT与C++的Canny边缘检测算法实现与GUI开发实战

1. 项目概述:为什么用QT和C手搓Canny?如果你正在学习数字图像处理,或者想用C和QT做一个带界面的图像处理工具,那么“Canny边缘检测”绝对是一个绕不开的经典项目。网上OpenCV的cv::Canny()函数调用起来就一行代码,但直…

作者头像 李华