在工作中,我们经常会遇到word文件转换成pdf文件的情况。如果文件很少,我们可以一个一个打开,保存为PDF。如果有上百个甚至更多的案例,旁边的要节省很多时间。好在python可以实现word到pdf的批量转换,还可以自定义保存路径,修改之前的后缀。下面就简单介绍一个例子,功能上不太完善。缺点是只能在windows操作系统下运行,需要安装office套件。
首先,你需要安装pywin32模块。这个模块包含了大量的Windows API。通过这个模块,你可以很容易地直接从python调用word。安装命令如下:
pip安装pywin32
第二,按照要求写代码。下面的例子都有详细的注释,可以参考,也可以根据自己的要求修改:
来自win32com。客户端导入常量,gencache #导入Win32com模块中对应的函数,用于从OS导入walk中启动word
从多处理导入池中导入OS
#转换word文件并保存
defd2p (input _ file,newname):
try:[-& # 34;+input _ file+& # 34;-音乐会开始-& # 34;)
word=gencache。ensure dispatch(& # 39;词。应用& # 39;)
wfile = word . documents . Open(input _ file,readonly = 1)# Open word
wfile . Save as(newname,fileformat = 17) # Save
word。Quit() #退出Word[/h]-& # 34;+newName+& # 34;音乐会结束了!!!- ")
除外:
打印(& # 34;请确保word应用程序已成功安装!!!")
#获取所有pdf文件(pdf保存目录,脚本目录)
def Get pfiles():
prepath = OS . path . split(OS . path . real path(_ _ file _ _)[0]pdf path]
pfiles =[]
I = 0
如果不是OS . path . exists(pdf path):
OS . makers(pdf path)#在您想要的位置创建目录2:
for root,dirs,Files in walk(path list[I]):
for file in Files:
if file . ends with(& # 34;。pdf & # 34):
pfiles . append(file)
else:
pass
I+= 1
Return pfiles
#获取脚本执行目录。""
:param pFiles:所有pdf文件(脚本目录根目录下的pdf文件和保存pdf文件的目录下的pdf文件)
& # 34;""
wFiles =[]
prePath = OS . path . split(OS . path . real path(_ _ file _ _)[0]
for root,dirs,files in walk(prePath):
for file in files:
if file . ends with(& # 39;doc & # 39)或file . ends with(& # 39;docx & # 39):
if(file . split(& # 39;。')[0]+'。pdf & # 39)不在pFiles中:
wfiles . append(OS . path . join(root,File))
else:
pass
else:
pass
返回列表(set (wfiles))
#获取所有word文件路径和pdf文件路径[/h]& # 34;"
:param pFiles:所有pdf文件(脚本目录根目录下的pdf文件和保存pdf文件的目录下的pdf文件)
& # 34;""
PAB path =[]
wab path = getw files(pFiles)
I = 0
while I & lt;Len(wAbPath):
#判断修改pdf文件名的文件是否已经存在,如果存在,则从word文件列表中删除文件路径
if (get newname(前缀,后缀,wAbPath[i]))在pFiles中:
wab path . remove(wab path[I])
I-= 1
else:
new file = get newname(前缀,后缀,Wabpath [I]]
"
:param prefix:修改后的pdf文件名的前缀,例如原文件名为1,添加前缀?后来呢?1
:param suffix:修改后的pdf文件名的后缀,比如原文件名是1,加上后缀后-就是1-
:param file:要保存的修改前pdf文件的完整路径
& # 34;""
new file = prefix+file[file . rfind(& # 34;")+1:file . find(& # 34;。")]+后缀+file[file . rfind(& # 34;。"):]# # # #
newName = new file . replace(new file . split(& # 39;。')[1],'pdf & # 39)
return newName
# script主入口
pdf path = & # 34;c:UsersAdministratorDesktoppdf & # 34;#要保存的pdf文件的位置
prefix = & # 34;(2022)渝0122 & # 34;#修改pdf文件名前缀,例如原文件名为1,添加前缀?后来呢?1
后缀= & # 34;-"#修改pdf文件名后缀,比如原文件名为1,后加后缀-1-
def main():
wallfiles,PD files = resolve path(getpfiles())
pools = pool(3)#定义进程池,最大进程池为3。=[]:
for I in range(len(wall files)):
#调用word转换为pdf方法,传递参数(异步执行)
pools。Apply _ async (D2p,args = (wall files [I],pdfiles [I )
pools.close() #关闭进程池,之后进程池将不会接受新的请求
pools.join() #等待池进程池的执行完成
else:
print(& # 34;没有文件需要concert格式!!!")
if _ _ name _ _ = = & # 39;_ _ main _ _ & # 39:
main()
这只是为了学习笔记和分享。如果有什么需要改进或不足的地方,请给我提意见。
1+0.01=1.01
1-0.01=0.99