如果需要用 Python 将 Word 文档批量转换为 PDF,建议使用第三方库 docx2pdf,简单得有点令人发指!

安装

pip install docx2pdf

基本使用

导入库之后,只需要给 convert() 函数2个参数,分别是 Word 文件名和 PDF 文件名就完事了!

python如何转换成pdf(使用docx2pdf将Word文档转换为PDF)(1)

基本使用

甚至可以把2个文件名直接写成 convert("document.docx", "document.pdf") , 一行代码就搞定!

批量转换

当然,所谓“批量”,指的是把一个文件夹里的所有 Word 文档批量处理掉,这就需要使用遍历函数 os.walk() 了。完整代码如下:

python如何转换成pdf(使用docx2pdf将Word文档转换为PDF)(2)

批量转换的完整代码

难点解释

第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"))

python如何转换成pdf(使用docx2pdf将Word文档转换为PDF)(3)

修改源代码中的断言

重新运行代码,竟然也能完美转换 .doc 的文件!

估计作者写这行断言,估计是对 .doc 的兼容支持不够完美吧。但不试试怎么知道不能用呢?

果断勇敢修改源代码第89行的断言吧~~~~~

,