您的位置 首页 知识

Python实现Word批量转PDF的小工具python批量修改word

目录 思路先摆明:Word 转 PDF,其实没那么复杂 上代码:几行就能跑起来的 Word 转 PDF 脚本 …

目录
  • 思路先摆明:Word 转 PDF,其实没那么复杂
  • 上代码:几行就能跑起来的 Word 转 PDF 脚本
  • 扩展:支持批量转换,一次性把一整个文件夹干掉!
  • 常见坑点,花姐来帮你避一避
  • 额外加点料
    • 生成时刻戳文件夹
    • 自动获取当前脚本目录下的 Word 文件
    • 检测 Office 和 WPS 的技巧
    • 自动选择引擎并批量转换
    • 整合所有内容,一键搞定脚本所在目录下的所有 Word 文件
    • 做成 EXE 给小白用户用(pyinstaller)
  • 完整代码

    前两天在某鱼闲逛,本来想找个二手机械键盘,结局刷着刷着突然看到有人在卖——Word 批量转 PDF 小工具,还挺火,价格也不高,但销量出奇地高,评论里一堆人在夸“好用”、“终于不用一篇篇点了”啥的。

    说实话,当时我人都愣住了——

    这个功能我用 Python 特别钟能写完啊!

    接着我又搜了其它小工具,pdf转Word,Word转图片,Word加水印什么的……好多

    好家伙,花姐以前教大家做的办公自动化小工具原来都能卖钱呀!

    那咱今天先复刻一个Word 批量转 PDF 小工具,顺便升级点功能,做个更丝滑的版本。

    保准你看完就能自己写个卖钱去。

    思路先摆明:Word 转 PDF,其实没那么复杂

    你别看这功能听起来挺“高质量”的,其实本质上干的事就是——

    把一堆 Word 文档用程序打开,接着保存为 PDF 格式。

    换句话说,这活本质就是个“批处理”。用 Python 来干,简直再合适不过。

    我们需要的工具是 python-docx?NoNoNo——这个库不支持保存为 PDF。真正的主角其实是:

    • win32com.client:用来操作 Word 应用(需要 Windows 体系+装了 Office)
    • 或者跨平台一点的玩法,用 LibreOffice + subprocess,不过今天我们先来讲讲最稳最简单的方式:用 Word 本尊来干活。

    上代码:几行就能跑起来的 Word 转 PDF 脚本

    好,开门见山,先上最基础的版本:

    import osimport win32com.clientdef word_to_pdf(input_path, output_path): word = win32com.client.Dispatch(“Word.Application”) word.Visible = False 不弹窗,后台运行 doc = word.Documents.Open(input_path) doc.SaveAs(output_path, FileFormat=17) 17 是 PDF 格式 doc.Close() word.Quit() 示例用法word_to_pdf(“C:/Users/你的用户名/Desktop/测试文档.docx”, “C:/Users/你的用户名/Desktop/测试文档.pdf”)

    几句解释:

    • Dispatch("Word.Application") 就是打开 Word 应用;
    • FileFormat=17 是告诉它“嘿,我要存成 PDF”;
    • 小编觉得的 Quit() 很重要,不然 Word 可能会在后台一直挂着,占资源。
    • 如果你电脑里安装的是WPSDispatch("Word.Application")这里改成Dispatch("kwps.Application"),不然会报错

    是不是很简单?连我猫都看懂了。

    扩展:支持批量转换,一次性把一整个文件夹干掉!

    很多人痛苦的点是“文档太多,一个个转太麻烦”。

    那好说,我们搞个批量版本,让它一口气全转了:

    def batch_convert(folder_path): word = win32com.client.Dispatch(“Word.Application”) word.Visible = False for file in os.listdir(folder_path): if file.endswith(“.doc”) or file.endswith(“.docx”): doc_path = os.path.join(folder_path, file) pdf_path = os.path.splitext(doc_path)[0] + “.pdf” try: doc = word.Documents.Open(doc_path) doc.SaveAs(pdf_path, FileFormat=17) doc.Close() print(f”&x2705; 转换成功:file}”) except Exception as e: print(f”&x274c; 转换失败:file},缘故:e}”) word.Quit()

    使用方式:

    batch_convert(r”C:Users你的用户名Desktopword文件夹”)

    常见坑点,花姐来帮你避一避

    写得简单不难,难的是兼容和细节

    1. 体系必须是 Windows,而且得装了 MS Office

    这玩意底层其实就是用 COM 调用了 Word 的功能,因此没有装 Word 是用不了的。

    2. 文档里有宏的、被保护的,可能转不了

    有些文档打开会弹窗提示宏或者密码,那个得手动改设置,程序跑不过去。

    3. 文件名不要太长、路径不要有中文/空格

    有时候路径太奇怪,Word 会打不开,转不了,建议统一放到纯英文文件夹里。

    额外加点料

    • 自动生成时刻戳文件夹 + 输出日志
    • 自动获取脚本所在目录下的 Word 文件(不需要用户手动输路径)
    • 判断电脑里是否装了 Office(Word)或 WPS,并自动选对的调用方式
    • 打包售卖

    生成时刻戳文件夹

    def gen_output_folder(): folder = os.path.dirname(os.path.abspath(__file__)) timestamp = datetime.datetime.now().strftime(“%Y%m%d_%H%M%S”) output_folder = os.path.join(folder, f”pdf_timestamp}”) os.makedirs(output_folder, exist_ok=True) return output_folder

    自动获取当前脚本目录下的 Word 文件

    这太简单了:

    import osdef get_word_files_from_current_folder(): folder = os.path.dirname(os.path.abspath(__file__)) word_files = [] for file in os.listdir(folder): if file.endswith(“.doc”) or file.endswith(“.docx”): word_files.append(os.path.join(folder, file)) return word_files

    检测 Office 和 WPS 的技巧

    我们可以尝试用 win32com.client.gencache.EnsureDispatch() 去判断这两个程序是否存在。

    import win32com.clientdef detect_office_or_wps(): try: word = win32com.client.gencache.EnsureDispatch(“Word.Application”) return “office” except: try: wps = win32com.client.gencache.EnsureDispatch(“Kwps.Application”) return “wps” except: return None

    自动选择引擎并批量转换

    import osimport win32com.clientdef convert_word_to_pdf_auto(input_path, output_path, engine): if engine == “office”: app = win32com.client.Dispatch(“Word.Application”) elif engine == “wps”: app = win32com.client.Dispatch(“Kwps.Application”) else: print(“&x274c; 没有检测到可用的 Office 或 WPS”) return app.Visible = False try: doc = app.Documents.Open(input_path) doc.SaveAs(output_path, FileFormat=17) doc.Close() print(f”&x2705; 转换成功:input_path}”) except Exception as e: print(f”&x274c; 转换失败:input_path},缘故:e}”) try: app.Quit() except: print(“&x26a0;&xfe0f; 当前环境不支持 Quit,跳过退出。”)

    整合所有内容,一键搞定脚本所在目录下的所有 Word 文件

    def batch_convert_here(): engine = detect_office_or_wps() if not engine: print(“&x1f62d; 体系里没有安装 Office 或 WPS,没法转换”) return folder = os.path.dirname(os.path.abspath(__file__)) word_files = get_word_files_from_current_folder() if not word_files: print(“&x1f937;&x200d;&x2640;&xfe0f; 当前文件夹没有发现 Word 文件”) return output_folder = os.path.join(folder, “pdf输出”) os.makedirs(output_folder, exist_ok=True) for word_file in word_files: filename = os.path.splitext(os.path.basename(word_file))[0] pdf_path = os.path.join(output_folder, f”filename}.pdf”) convert_word_to_pdf_auto(word_file, pdf_path, engine) print(“&x1f389; 所有文件转换完成啦!PDF 都在 ‘pdf输出’ 文件夹里”)

    运行方式(放在脚本小编觉得):

    if __name__ == “__main__”: batch_convert_here()

    做成 EXE 给小白用户用(pyinstaller)

    最终一步,把咱的脚本打包成 .exe,丢到某鱼卖钱(手动狗头)

    命令就一句话:

    pyinstaller -F word2pdf.py

    完整代码

    import osimport win32com.clientimport sysimport datetimedef get_real_path(): “””兼容开发与打包环境的路径获取””” if getattr(sys, ‘frozen’, False): base_dir = os.path.dirname(sys.executable) EXE文件所在目录[1,7](@ref) else: base_dir = os.path.dirname(os.path.abspath(__file__)) return base_dir 生成时刻戳文件夹def gen_output_folder(folder): folder = os.path.dirname(os.path.abspath(__file__)) timestamp = datetime.datetime.now().strftime(“%Y%m%d_%H%M%S”) output_folder = os.path.join(folder, f”pdf_timestamp}”) os.makedirs(output_folder, exist_ok=True) return output_folder 自动获取当前脚本目录下的 Word 文件def get_word_files_from_current_folder(folder): folder = os.path.dirname(os.path.abspath(__file__)) word_files = [] for file in os.listdir(folder): if file.endswith(“.doc”) or file.endswith(“.docx”): word_files.append(os.path.join(folder, file)) return word_files 检测 Office 和 WPS 的技巧def detect_office_or_wps(): try: word = win32com.client.gencache.EnsureDispatch(“Word.Application”) return “office” except: try: wps = win32com.client.gencache.EnsureDispatch(“Kwps.Application”) return “wps” except: return None 自动选择引擎并批量转换def convert_word_to_pdf_auto(input_path, output_path, engine): if engine == “office”: app = win32com.client.Dispatch(“Word.Application”) elif engine == “wps”: app = win32com.client.Dispatch(“Kwps.Application”) else: print(“没有检测到可用的 Office 或 WPS”) return app.Visible = False try: doc = app.Documents.Open(input_path) doc.SaveAs(output_path, FileFormat=17) doc.Close() print(f”转换成功:input_path}”) except Exception as e: print(f”转换失败:input_path},缘故:e}”) try: app.Quit() except: print(“当前环境不支持 Quit,跳过退出。”) 主函数 def batch_convert_here(): engine = detect_office_or_wps() if not engine: print(“体系里没有安装 Office 或 WPS,没法转换”) return folder = get_real_path() word_files = get_word_files_from_current_folder(folder) if not word_files: print(“当前文件夹没有发现 Word 文件”) return output_folder = gen_output_folder(folder) for word_file in word_files: filename = os.path.splitext(os.path.basename(word_file))[0] pdf_path = os.path.join(output_folder, f”filename}.pdf”) convert_word_to_pdf_auto(word_file, pdf_path, engine) print(“所有文件转换完成啦!PDF 都在 ‘output_folder’ 文件夹里”) if __name__ == “__main__”: try: batch_convert_here() print(“按 Enter 键退出…”) input() 等待用户按 Enter 键 except Exception as e: print(e) print(“程序运行错误,按 Enter 键退出…”) input() 等待用户按 Enter 键

    你可能觉得:“这不就是几十行代码嘛,卖这个会有人买吗?”

    我一开始也这么想。后来我想通了,某鱼上很多买家,根本不懂技术,他们在意的是:

    • 能不能一键搞定?
    • 会不会太复杂?
    • 省不省事?

    因此啊,写工具 + 提供说明 + 包装打包,这些就构成了“产品”。

    我们程序员有时候太低估自己的能力了——其实你随手写的脚本,真的能解决很多人的难题。

    到此这篇关于Python实现Word批量转PDF的小工具的文章就介绍到这了,更多相关Python Word批量转PDF内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

    无论兄弟们可能感兴趣的文章:

    • Python中PDF转Word的多种实现技巧
    • Python将Word文档转为PDF的两种技巧
    • Python实现PDF到Word文档的高效转换
    • Python实现PDF转Word的多种方式拓展资料
    • Python实现批量将word转换成pdf
    • Python实现批量word文档转pdf并统计其页码
    版权声明
    返回顶部