在日常办公过程中,总是离不开和文档打交道,有一个最常用的场景就是把 Word 文档转成 PDF 格式。PDF 文档的优势在于:在不同编辑器或不同设备上,打开后不会出现格式错乱或文字乱码。原因也很简单,Word 转 PDF 的本质是将可读写的 Word 变成了只读的 PDF。
最近就遇到一个好玩的问题,我打算将自己写的一篇 Word 笔记,转成 PDF 保存在U盘里备份。起初想到最直接的方式就是修改扩展名了,如下:
原本以为这样就完事了,准备用 PDF 阅读器打开检查一下转换的效果:
额,这下尴尬了,是转换没成功?我又改成通过浏览器方式打开看看,结果让人失望:
于是,找度娘问了一下,大致上提供了两种解决的方法:
方法1、打开 Word 文档,另存为..,把保存类型改为 .pdf 即可。
方法2、下载PDF转换器进行转换,优势是可以批量转换,网上的PDF转换器参差不齐,有的免费有的收费。
当进行一个 Word 文档转换还可以使用方法1,但是当一大堆 Word 文档需要转成 PDF,这意味着每个都打开再另存为,这操作简直要疯了!作为一名菜鸟程序员,我总是想去找别人造好的轮子拿来用—-下载PDF转换器,可是还要去搜索免费的,如果是比较重要而机密的文档怎么能放心的在线转换?思来想去,想到了正在学习的无敌Python,用几行核心代码就应该能实现上面批量转换的需求。
经过了解和学习,有很多第三方库可以实现批量转 PDF 的需求,比如 pywin32、comtypes 等。这里,我将以comtypes库为例,分析下具体转换的实现思路。Word 转换成 PDF 的本质,就是模拟我们在 Windows 上打开 Word 文档并另存为 .pdf 的操作过程。因此,实现起来也很简单。
第一步,下载依赖:
pip install comtypes
第二步,代码实现同一个目录下批量生成.pdf
import os
import comtypes.client
def get_path():
path = os.getcwd() # 获取当前运行路径
filename_list = os.listdir(path)
wordname_list = [filename for filename in filename_list if filename.endswith((".doc", ".docx"))]
for wordname in wordname_list:
# 分离word文件名称和后缀,转化为pdf名称
pdfname = os.path.splitext(wordname)[0] + '.pdf'
# 如果当前word文件对应的pdf文件存在,则不转化
if pdfname in filename_list:
continue
wordpath = os.path.join(path, wordname) # word所在目录
pdfpath = os.path.join(path, pdfname) #存放生成的pdf目录
#生成器
yield wordpath,pdfpath
if __name__ == '__main__':
word = comtypes.client.CreateObject("Word.Application")
word.Visiable=0 #设置可见性,不可见
for w,p in get_path():
newpdf = word.Documents.Open(w)
newpdf.SaveAS(p, FileFormat=17) #17表示PDF格式
newpdf.Close()
第三步,运行程序查看效果:
另外,我在 Piyp 官网上也搜到 docx2pdf ,从简介上看,它可以通过非代码的方式快速实现批量转换,简直太劲爆了!docx2pdf 是基于脚手架 CLI 方式操作的:
第一步,下载依赖:
pip install docx2pdf
第二步,通过命令实现 Word 批量转换成 PDF:
需要注意:
- 实现单个转换:第一个参数指定具体的word文档,第二个参数是转换后的pdf文档。
- 实现批量转换:第一个参数路径是word文档的路径,第二个参数是存放生成pdf文档的路径。
转换效果如下所示:
docx2pdf 依赖下载及API,可参考: https://pypi.org/project/docx2pdf/。
至此,通过 Python 轻松搞定了 Word 文档转 PDF 格式的问题。转换实现的方式不止一种,可以代码实现,也可以非代码实现,并兼容了批量转换操作。
文章出处登录后可见!