网站首页 > 开源技术 正文
如果需要用 Python 将 Word 文档批量转换为 PDF,建议使用第三方库 docx2pdf,简单得有点令人发指!
安装
pip install docx2pdf
基本使用
导入库之后,只需要给 convert() 函数2个参数,分别是 Word 文件名和 PDF 文件名就完事了!
甚至可以把2个文件名直接写成 convert("document.docx", "document.pdf") , 一行代码就搞定!
批量转换
当然,所谓“批量”,指的是把一个文件夹里的所有 Word 文档批量处理掉,这就需要使用遍历函数 os.walk() 了。完整代码如下:
难点解释
第6行,遍历获取所有文件名那行,有点不好理解。
files = [os.path.join(i[0], j) for i in os.walk(cwd) for j in i[-1] if j.endswith('docx')]
简单地说,就是用列表推导式拼接出目录下所有扩展名为 .docx 的文件名。建议死记硬背,或作为公式直接添加输入法字条。
天坑 1
使用 docx2pdf 有一个大坑,就是运行代码时,需要把所有 Word 文档全部关闭(如果还报错,就关闭所有 PDF 文件。如果还报错,那就只能重启计算机了),否则就会报错:AttributeError: Open.SaveAs
天坑 2
从这个库的名称可以看出来,似乎是仅支持扩展名为 .docx 的 World 文档。如果尝试将扩展名为 .doc 的文档转换为 PDF 就会报错。比如,将遍历获取所有文件名那行改为:
files = [os.path.join(i[0], j) for i in os.walk(folder) for j in i[-1] if j.endswith('docx') or j.endswith('doc')]
在处理 .doc 的文档时,代码就会报错 AssertionError
检查如下位置的源代码:
C:\Users\Deredell\AppData\Roaming\Python\Python38\site-packages\docx2pdf\__init__.py
发现有一行断言(assert):
assert str(input_path).endswith(".docx")
如果把上面这行断言修改一下、使之兼容 .doc 的文件呢?
assert (str(input_path).endswith(".docx") or str(input_path).endswith(".doc"))
重新运行代码,竟然也能完美转换 .doc 的文件!
估计作者写这行断言,估计是对 .doc 的兼容支持不够完美吧。但不试试怎么知道不能用呢?
果断勇敢修改源代码第89行的断言吧~~~~~
猜你喜欢
- 2025-04-27 作为一个seoer,教你如何利用高级搜索指令
- 2025-04-27 Python 开源神器 GNE 实现新闻页面智能解析无广告,准确率 99%
- 2025-04-27 一些超实用搜索窍门,让你真正学会搜索
- 2025-04-27 最详细的 maven 教程,可以收藏
- 2025-04-27 不会写文档,叫什么高级程序员
- 2025-04-27 神技巧:你真的会用“百度搜索”吗?
- 2025-04-27 看 Bolt 与 Cursor 携手,探秘 ChatPDF 智能应用实战开发
- 2025-04-27 SITEFACTORY粘贴图片自动上传到服务器(JAVA版)
- 2025-04-27 SCI论文格式模板使用教程(1)从期刊官网下载manuscript模板
- 2025-04-27 百度高级检索小妙招
你 发表评论:
欢迎- 04-27谁是2020年最强Python库?年度Top10出炉
- 04-27基于uniapp开发的前端低代码平台附源码
- 04-27EasyCaching:让缓存更简单!
- 04-27兰亭集势建海外版微店
- 04-27获取流量的方法论,简单才有效
- 04-27微信官方跑去卖手机壳?48元你买不
- 04-27投入1.7万亿美元推进核武器现代化,美国干的这件事比贸易讹诈更危险!
- 04-27抓住毒枭儿子的墨西哥警察遭报复,停车场内被围堵射击155枪
- 最近发表
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)