乐于分享
好东西不私藏

Python 脚本|Word 批量转 PDF,隐私保护 + 格式固定,办公一键归档

Python 脚本|Word 批量转 PDF,隐私保护 + 格式固定,办公一键归档

日常整理合同、简历、报告、标书时,我们经常需要把 Word 转成 PDF:防止内容被篡改、保证排版不跑偏、方便分发和打印。但在线工具要么有水印、要么限速、要么泄露隐私,手动转换又慢又累。

今天给大家带来一款本地离线、无水印、免费高效的 Python 批量转换脚本,基于 Word 原生接口导出,格式 100% 还原,不修改原文件,小白复制粘贴就能用。


一、功能亮点(比在线工具更安全、更好用)

市面上在线转换坑点多:隐私风险、格式错乱、加水印、收费。这款脚本纯本地运行,优势一目了然:

功能特性
说明
本地离线转换
文件绝不上传云端,合同 / 简历等敏感文档绝对安全
递归批量扫描
自动遍历文件夹及子文件夹,一键处理所有 .doc/.docx
原生格式保真
调用 Microsoft Word 接口导出,字体、排版、表格完美保留
同名自动覆盖
原目录生成同名 PDF,不破坏原始 Word,重复文件直接覆盖
静默后台运行
不弹出 Word 窗口,不弹窗干扰,转换更安静
成功失败统计
清晰显示转换总数、成功数、失败数,方便核对

二、零基础小白教程(全新电脑也能操作)

没装过 Python、不会写代码也没关系,跟着 5 步走,全程复制粘贴,1 分钟配置完成。

第 1 步:安装 Python

  1.    1.打开 Python 官网:https://www.python.org/downloads/
  2.    2.点击 Download Python(3.8 及以上版本均可)
  3.    3.运行安装包
  4.      ⚠️ 关键:安装界面底部一定要勾选 Add Python to PATH,再点 Install Now

第 2 步:安装依赖库

  1.    按 Win + R,输入 cmd 打开命令提示符
  2.    粘贴执行下面这一行
    pip install pywin32
第 3 步:保存脚本文件
  • 在桌面新建文本文档
  • 把文末完整脚本代码全部复制进去
  • 点击「文件 → 另存为」
  • 文件名改为:word_batch_to_pdf.py
  • 保存类型选:所有文件,确保后缀是 .py 不是 .txt
第 4 步:配置你的文件夹(最重要一步)
  • 用记事本打开 word_batch_to_pdf.py
  • 找到这一行:
    TARGET_FOLDER = r"C:\Users\Desktop\新建文件夹"
    ✅ 修改后,以后直接双击脚本就能自动转换,不用再输命令!

第 5 步:运行脚本 & 查看结

  1. 把所有要转的 .doc/.docx 放进你配置的文件夹
  2. 双击运行 word_batch_to_pdf.py
  3. 等待脚本执行完成
  4. 去原文件夹查看:每个 Word 旁边已生成同名 PDF

三、脚本核心优势(为什么推荐用它)

  1. 1.隐私绝对安全

  2.    全程本地处理,不联网、不上传,敏感合同、个人简历放心转。

  3. 2.格式零失真

  4.    用 Microsoft Word 原生导出,比第三方库更稳定,表格、页眉页脚、图片位置不变形。

  5. 3.批量效率拉满

  6.    一次放几十上百份文档,递归扫描子文件夹,后台自动跑完。

  7. 4.不破坏原文件

  8.    只生成新 PDF,原始 Word 不动,归档、备份两不误。

四、适用场景

  • 合同 / 协议批量导出 PDF,防止篡改
  • 简历批量转格式,统一投递
  • 报告 / 标书归档,固定版式不跑版
  • 课件 / 资料批量转 PDF,方便分享打印
  • 企业内部文档标准化处理
#!/usr/bin/env python3# -*- coding: utf-8 -*-"""Word 批量转 PDF(本地离线版)功能:1. 在代码中指定一个文件夹路径;2. 递归扫描该文件夹下所有 .doc / .docx 文件;3. 在原文件所在目录生成同名 PDF;4. 若已存在同名 PDF,则直接覆盖;5. 全程本地转换,不上传文件,不修改原始 Word。依赖:- Windows- 已安装 Microsoft Word- pywin32: pip install pywin32使用方法:1. 修改下方 TARGET_FOLDER 为你的目标文件夹;2. 直接运行脚本即可。"""from __future__ import annotationsimport sysfrom pathlib import PathWORD_EXTENSIONS = {".doc"".docx"}PDF_FORMAT = 17OPTIMIZE_FOR_PRINT = 0EXPORT_CURRENT_DOCUMENT = 0CREATE_NO_BOOKMARKS = 0# ====================== 请修改这里为你的文件夹路径 ======================TARGET_FOLDER = r"C:\Users\15388\Desktop\新建文件夹"# =======================================================================OVERWRITE_EXISTING_PDF = Truedef iter_word_files(folder: Path) -> list[Path]:    files: list[Path] = []    for path in folder.rglob("*"):        if not path.is_file():            continue        if path.name.startswith("~$"):            continue        if path.suffix.lower() not in WORD_EXTENSIONS:            continue        files.append(path)    files.sort()    return filesdef convert_word_files(folder: Path) -> int:    try:        import pythoncom        import win32com.client    except ImportError:        print("缺少依赖:请先执行 `pip install pywin32`")        return 1    word_files = iter_word_files(folder)    if not word_files:        print(f"未找到可转换的 Word 文件:{folder}")        return 0    print("开始转换,所有文件仅在本地处理,不会上传。")    print(f"目标目录:{folder}")    print(f"扫描到 Word 文件数量:{len(word_files)}")    pythoncom.CoInitialize()    word = None    success_count = 0    fail_count = 0    try:        word = win32com.client.DispatchEx("Word.Application")        word.Visible = False        word.DisplayAlerts = 0        for index, source_path in enumerate(word_files, start=1):            pdf_path = source_path.with_suffix(".pdf")            doc = None            try:                doc = word.Documents.Open(                    str(source_path),                    ConfirmConversions=False,                    ReadOnly=True,                    AddToRecentFiles=False,                    Visible=False,                )                doc.ExportAsFixedFormat(                    OutputFileName=str(pdf_path),                    ExportFormat=PDF_FORMAT,                    OpenAfterExport=False,                    OptimizeFor=OPTIMIZE_FOR_PRINT,                    Range=EXPORT_CURRENT_DOCUMENT,                    Item=0,                    IncludeDocProps=True,                    KeepIRM=True,                    CreateBookmarks=CREATE_NO_BOOKMARKS,                    DocStructureTags=True,                    BitmapMissingFonts=True,                    UseISO19005_1=False,                )                success_count += 1                print(f"[{index}/{len(word_files)}] 成功:{source_path} -> {pdf_path}")            except Exception as exc:                fail_count += 1                print(f"[{index}/{len(word_files)}] 失败:{source_path},原因:{exc}")            finally:                if doc is not None:                    doc.Close(False)    finally:        if word is not None:            word.Quit()        pythoncom.CoUninitialize()    print("\n转换完成")    print(f"成功:{success_count}")    print(f"失败:{fail_count}")    return 0 if fail_count == 0 else 2def main() -> int:    folder = Path(TARGET_FOLDER).expanduser().resolve()    if not folder.exists():        print(f"文件夹不存在:{folder}")        return 1    if not folder.is_dir():        print(f"目标不是文件夹:{folder}")        return 1    print(f"当前配置的目标文件夹:{folder}")    print(f"重复 PDF 处理方式:{'直接覆盖'if OVERWRITE_EXISTING_PDF else'保留原文件'}")    return convert_word_files(folder)if __name__ == "__main__":    sys.exit(main())