700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 关于python:如何将Word文档批量转换为PDF文档

关于python:如何将Word文档批量转换为PDF文档

时间:2022-08-10 20:39:27

相关推荐

关于python:如何将Word文档批量转换为PDF文档

Q:

我们在实际工作中很容易发现,有些时候我们需要将Word文档转换为PDF文档,如果只是一个文件,我们也只是需要通过Word提供的转换为PDF文档的功能就可以实现了。但是WPS需要收费才能使用将Word转换为PDF文档的服务,而且Microsoft Word安装更新等等一系列问题出现。而且当我们要转换文档非常多的时候,转换则变得费时费力;可见手动转换文档就成为了鸡肋。

本篇博文将教会大家如何用Python程序实现自动化方式批量转换文件格式。

提前准备

如果想要批量把Word文档转换为PDF文档,我们可以使用第三方模块win32com。步骤如下:

(1)在CMD命令窗口中安装win32com模块,如果读者有Pycharm,可以在Pycharm的Terminal(控制台)中输入命令Pycharm对应命令:

pip install pywin32

引入模块函数

(2)通过导入pywin32模块,创建Python文件。在该文件中导入win32com模块及其他辅助模块。应用代码及注释如下:

import os # 导入系统功能模块from win32com.client import Dispatch,DispatchEx # 导入win32com模块的client包下的函数from win32com.client import constants # 导入win32com模块的client包下的保存COM常量的类。from win32com.client import gencache # 导入win2com模块的client包下的gencache()函数import re # 导入正则表达式模块

自定义转换文件格式函数

(3)如果想要实现将Word文档转换为PDF文档,这里使用自定义方法定义函数:wordtopdf。该函数包含了两个参数,第一个参数表示要转换的文件路径列表;第二个参数表示转换后的文件保存的路径。在这个函数中,要注意的是首先调用win32com模块的Dispatch()函数获取Word应用程序对象;然后通过遍历文件列表中的Word文件名称,并且生成对应名称的PDF文件;最后通过Word应用程序对象的文档对象的open()方法打开Word文档并且进行转换。具体逻辑如下:

def wordtopdf(filelist,targetpath):valueList = []try:gencache.EnsureModule('{00020905-0000-0000-C000-000000000046}',0,8,4)# 开始转换w = Dispatch("Word.Application")for fullfilename in filelist:# 分割文件路径和文件名,其中,filepath表示文件路径,filename表示文件名(filepath,filename) = os.path.spilt(fullfilename)softfilename = os.path.split(filename) # 分割文件名和扩展名os.chdir(filepath)doc = os.path.abspath(filename)os.chdir(targetpath)pdfname = softfilename[0]+".pdf"output = os.path.abspath(pdfname)pdf_name = output# 文档路径需要为绝对路径,Word启动之后的当前路径不是调用脚本时的当前路径try:doc = w.Document.Open(doc,ReadOnly = 1)doc.ExportAsFixedFormat(output,constants.wdExportFormatPDF,Item = constants.wdExportDocumentWithMarkup,CreateBookmarks = constants.wdExportCreateHeadingBookmarks)except Exception as e:# 处理异常print(e)if os.path.isfile(pdf_name): # 判断文件是否存在valueList.append(pdf_name)# 添加到文件列表中else:print('转换失败!!!')return Falsew.Quit(constants.wdDoNotSaveChanges) # 退出Word应用程序return valueListexcept TypeError as e:print('出错了!!!')print(e)return False

自定义遍历路径下文件格式

(4)由于要转换多个Word文档,索引需要实现或许指定的路径下全部的Word文件路径的功能。接下来我们再定义一个函数:getfilenames(),用于获取到指定路径下的指定扩展名的文件路径(也包括子目录下的文件)。在这个自定义的函数中,根据传递的路径遍历出该路径下的指定扩展名的文件。如果是Word文档,需要它同时遍历出.doc和.docx格式的文档。getfilenames()函数的具体逻辑如下:

def getfilenames(filepath='',filelist_out = [],file_ext = 'all'):# 遍历filepath下的所有文件,包括子目录下的文件for fpath,dirs,fs in os.walk(filepath):for f in fs:fi_d = os.path.join(fpath,f)if file_ext == '.doc':# 遍历Word文档文件if os.path.splitext(fi_d)[1] in ['.doc','.docx']: # 判断是否为Word文件filelist_out.append(re.sub(r'\\','/',fi_d))# 添加到路径列表中else:if file_ext =='all': # 要获取所有文件的情况filelist_out.append(fi_d) # 将文件路径添加到路径列表中elif os.path.splitext(fi_d)[1]==file_ext: # 要获取除了Word文件以外的文件filelist_out.append(fi_d) # 将文件路径添加到路径列表中else:passfilelist_out.sort() # 对路径进行排序return filelist_out# 返回文件完整路径中

调用前两个自定义函数

(5)第五步就是要进行函数调用的过程,对两个函数体中的变量在该函数中进行赋值,然后执行已经声明的方法,在函数体中进行调用。分别实现单个的Word文件转换为PDF文件和多个Word文件进行转换。首先实现的是利用getfilename()函数得到要转换的文件路径,然后再使用wordtopdf()函数实现批量转换文件格式。

if __name__ == '__main__':sourcepath =r"C:\Users\Administrator\Desktop\转换格式文档" # 这里要指定路径(Word文档所在路径)targetpath =r"C:\Users\Administrator\Desktop\转换格式文档" # 这里要及性能指定目标路径(PDF文件保存路径)filelist = getfilenames(sourcepath,[],'.doc')# 获取Word文件路径valuelist = wordtopdf(filelist,targetpath) # 实现Word文件批量转换为PDF文件if valuelist:print("转换成功!!!")else:print("转换失败!!!")

效果图:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。