.docx 文件。
import osimport globimport win32com.client as win32from pathlib import Pathdef word_to_pdf_batch(input_folder, output_folder):"""批量将文件夹内的 Word 文档转换为 PDF:param input_folder: 存放 Word 文档的文件夹路径:param output_folder: 存放生成 PDF 的文件夹路径"""# 1. 创建输出文件夹(如果不存在)Path(output_folder).mkdir(parents=True, exist_ok=True)# 2. 获取所有 docx 文件# 支持 .docx 和 .doc (建议尽量使用 .docx)word_files = glob.glob(os.path.join(input_folder, "*.docx"))# 如果需要兼容老版本 .doc,可以取消下面这行的注释# word_files += glob.glob(os.path.join(input_folder, "*.doc"))if not word_files:print("❌ 未在文件夹中找到任何 Word 文档。")returnprint(f"📂 找到 {len(word_files)} 个文件,开始转换...")# 3. 启动 Word 应用程序 (后台运行)word = win32.Dispatch('Word.Application')word.Visible = False # 关键:设置为不可见,避免弹窗干扰word.DisplayAlerts = False # 关闭警告提示try:for i, word_path in enumerate(word_files, 1):file_name = os.path.basename(word_path)base_name = os.path.splitext(file_name)[0]pdf_path = os.path.join(output_folder, f"{base_name}.pdf")print(f"[{i}/{len(word_files)}] 正在转换:{file_name} ...", end='\r')# 打开文档doc = word.Documents.Open(word_path)# 另存为 PDF# wdFormatPDF = 17 是 Word 常量,代表 PDF 格式doc.SaveAs2(FileName=pdf_path, FileFormat=17)# 关闭文档,不保存更改doc.Close(False)print("\n✅ 全部转换完成!")except Exception as e:print(f"\n❌ 转换过程中发生错误:{e}")finally:# 4. 无论成功失败,务必退出 Word 进程,防止后台残留word.Quit()print("Word 进程已关闭。")# ================= 配置区域 =================if __name__ == "__main__":# 请修改这里为你的实际文件夹路径# 建议使用绝对路径,例如:C:/Users/YourName/Desktop/Docsinput_dir = r"./input_docs" # 放 Word 文件的文件夹output_dir = r"./output_pdfs" # 生成的 PDF 存放文件夹# 为了演示,如果文件夹不存在则自动创建示例文件逻辑略去,请确保 input_dir 里有文件if not os.path.exists(input_dir):os.makedirs(input_dir)print(f"已创建输入文件夹:{input_dir},请将 Word 文件放入其中再运行。")else:word_to_pdf_batch(input_dir, output_dir)
word.Visible = False: 这是提升体验的关键。如果不加这一行,转换时你的屏幕上会疯狂闪烁 Word 窗口,甚至无法操作其他软件。设置为 False 后,它就会在后台“悄悄”干活了。FileFormat=17: 在 Word 的宏录制中,17 代表导出为 PDF。这是硬编码的常量,比导入一堆常量库更直接有效。finally 块的重要性: 如果代码运行报错后会忘记关闭 Word,那么会导致任务管理器里残留一堆 WINWORD.EXE 进程,占用内存甚至导致下次无法打开 Word。而finally 确保了即使中途出错,Word 也会被强制关闭。pathlib 和 os.path 来处理路径,避免了 Windows 上常见的反斜杠 \ 转义问题(所以路径前加了 r)。合集 | 文章 |
|---|---|