python如何转换成pdf(使用docx2pdf将Word文档转换为PDF)
如果需要用 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行的断言吧~~~~~
,
免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com