龙空技术网

Python自动化批量word转换pdf

众寻千度 931

前言:

而今各位老铁们对“python批量pdf转word”大致比较讲究,看官们都想要了解一些“python批量pdf转word”的相关内容。那么小编同时在网摘上搜集了一些有关“python批量pdf转word””的相关知识,希望大家能喜欢,你们快快来学习一下吧!

在工作中经常会遇到将word文件转换为pdf文件的情况,如果文件很少的情况下,可以挨个打开并另存为pdf;如果是成百上千甚至更多的情况下,挨着另存就会耗费大量时间。幸运的是,利用python可以实现word转pdf的批量转换,还可以自定义保存路径以及修改前后缀,下面将简单介绍一个例子,功能不甚完善,缺点是只可以在windows操作系统下运行并且要求安装office套件。

一、首先需要安装pywin32模块。该模块包含了大量的Windows API,通过该模块,可以很方便地从python直接调用word,安装命令如下:

pip install pywin32

二:根据需求编写代码,下面示例有详细注释,可进行参考,根据自身需求进行修改:

from win32com.client import constants, gencache #导入win32com模块中相应函数,用来启动wordfrom os import walkimport osfrom multiprocessing import Pool#对word文件进行转换并保存def d2p(input_file,newName):    try:        print("------"+input_file+"---Concert Start------")        word=gencache.EnsureDispatch('Word.Application')        wFile=word.Documents.Open(input_file,ReadOnly=1)    #打开word        wFile.SaveAs(newName,FileFormat=17)    #以pdf格式保存        word.Quit() #退出word        print("------"+newName+"---Concert Finished!!!------")    except:        print("Please make sure that  the word application has been successfully installed!!!")#获取所有pdf文件(pdf保存目录、脚本所在目录)def getPFiles():    prePath=os.path.split(os.path.realpath(__file__))[0]    #脚本所在目录    pathList=[prePath,pdfPath]    pFiles=[]    i=0    if not os.path.exists(pdfPath):        os.makedirs(pdfPath)    #如果要保存pdf的目录不存在则进行创建    else:        while i<2:            for root,dirs,Files in walk(pathList[i]):                for file in Files:                    if file.endswith(".pdf"):                        pFiles.append(file)                    else:                        pass            i+=1    return pFiles    #获取脚本执行目录中所有word文件列表(不包含已存在pdf格式的word文件)def getWFiles(pFiles):    """    :param pFiles:所有的pdf文件(脚本所在目录的根目录下的pdf文件以及所要保存pdf文件的位置目录下的pdf文件)    """    wFiles=[]    prePath=os.path.split(os.path.realpath(__file__))[0]    for root,dirs,files in walk(prePath):        for file in files:            if file.endswith('doc') or file.endswith('docx'):                if (file.split('.')[0]+'.pdf') not in pFiles:                    wFiles.append(os.path.join(root,file))                else:                    pass            else:                pass    return list(set(wFiles))#获取所有的word文件路径以及pdf文件路径def resolvePath(pFiles):    """    :param pFiles:所有的pdf文件(脚本所在目录的根目录下的pdf文件以及所要保存pdf文件的位置目录下的pdf文件)    """    pAbPath=[]    wAbPath=getWFiles(pFiles)    i=0    while i<len(wAbPath):        #判断修改pdf文件名后的文件是否已经存在,如果存在则把该文件路径从word文件列表中删除        if (getNewName(prefix,suffix,wAbPath[i])) in pFiles:                wAbPath.remove(wAbPath[i])            i-=1        else:            newFile=getNewName(prefix,suffix,wAbPath[i])            pAbPath.append( os.path.join(pdfPath,newFile))        i+=1    return wAbPath,pAbPath        #修改pdf保存路径和名称,前缀和后缀可根据需求修改def getNewName(prefix,suffix,file):    """    :param prefix:修改后的pdf文件名前缀,例如原文件名为1,添加前缀?后为?1    :param suffix:修改后的pdf文件名后缀,例如原文件名为1,添加后缀-后为1-    :param file:需要保存的修改前pdf文件的完整路径    """    newFile=prefix+file[file.rfind("\\")+1:file.find(".")]+suffix+file[file.rfind("."):] ####    newName=newFile.replace(newFile.split('.')[1],'pdf')    return newName#脚本main入口pdfPath="C:\\Users\\Administrator\\Desktop\\pdf"    #所要保存pdf文件的位置prefix="(2022)豫0122"    #修改后的pdf文件名前缀,例如原文件名为1,添加前缀?后为?1suffix="-"    #修改后的pdf文件名后缀,例如原文件名为1,添加后缀-后为1-def main():    wAllFiles,pdfFiles=resolvePath(getPFiles())    pools=Pool(3)  #定义进程池,最大进程池为3    if wAllFiles!=[]:        for i in range(len(wAllFiles)):             #调用word转换为pdf方法,并传递参数(异步执行)            pools.apply_async(d2p,args=(wAllFiles[i],pdfFiles[i],))         pools.close()    #关闭进程池,关闭后pools不再接受新的请求          pools.join()    #等待pool进程池的执行完毕    else:        print("No file need concert format!!!")if __name__ == '__main__':    main()

仅以此作为学习笔记以及分享,如有需改进或者不妥之处,请多多指教。

1+0.01=1.01

1-0.01=0.99

标签: #python批量pdf转word