Python将目录下的doc和docx文件转为pdf文件
好久都没有写过Python相关的文章了,其实也是因为我好久都没有碰Python了,今天收到了很多的练习题,但是发现全都是doc格式的,有一个docx格式的,网上找了找没有啥好用的在线转换,我总不可能自己一个一个打开然后另存新档吧?(虽然也是可以啦),所以就写了这么一段能够将目录下所有的档案都转换为pdf档案的东西。
注意:其实没有写检测是不是全部都是docx或者doc,如果其中混入了其他档案可能会崩溃,不过我自己个人用就没太在意。
前期准备
需要一个库,pywin32
和 comtypes
这两个二择一,我个人试过comtypes
没办法弄之后查了一下发现pywin32
的好像兼容性高一些(可能是我的电脑垃圾),所以就用了下面的 win32com
,如果也是选用这个的话其实可以把 import comtypes.client
删掉,不然也可以两个都安装,安装指令:
pip install pywin32
pip install comtypes
那基本上其实就是安装一下库就行了,然后把所有的doc或者docx文件都放到一个目录,并且替换代码中的 input_path
和 output_path
,一个是输入目录,一个是输出目录,因为是在Win系统测试的关系,所以写的是Win的格式的目录,如果在Linux上运行的话可能就是写Linux的,不过我估计会崩(毕竟那个库叫 pywin32 嘛)
遇到的困难
写这个小程序真的是一波三折,首先上面也有提到过,一开始我用 comtypes
死活过不了,然后才转的pywin32
,然而就是因为一开始在疯狂乱搞,搞出了一个以~$
的乱码文件,然后我一时之间没注意到,搞到后面一直就是处理不了,我又花了十多分钟重写了一次也是这样,最好笑的是我进去那个文件夹,居然找不到这个乱码文件,最后只能靠切片来进行(就是 for file in files
切成 for file in files[1:]
)
代码
# -*- coding: UTF-8 -*-
from ntpath import join
import os
import sys
import comtypes.client
import win32com.client
input_path = r"C:\\Users\\Administrator\\Desktop\\doc_files\\"
output_path = r"C:\\Users\\Administrator\\Desktop\\Python\\doc2pdf\\result\\"
# w=win32com.client.constants
print("正在开始转化", input_path,"目录下的word文件到pdf文件到", output_path, "目录")
files = os.listdir(input_path)
word = win32com.client.Dispatch('Word.Application')
for file in files:
input_file = os.path.abspath(join(input_path, file))
output_file = os.path.abspath(join(output_path, file.replace('docx', 'pdf').replace('doc', 'pdf')))
print('正在处理文件:', input_file, '转换为', output_file)
# word.Visible = False
doc = word.Documents.Open(input_file)
doc.ExportAsFixedFormat(OutputFileName=output_file,
ExportFormat=17, #17 = PDF output, 18=XPS output
OpenAfterExport=False,
OptimizeFor=0, #0=Print (higher res), 1=Screen (lower res)
CreateBookmarks=1, #0=No bookmarks, 1=Heading bookmarks only, 2=bookmarks match word bookmarks
DocStructureTags=True
)
doc.Close()
print('处理完成文件:', input_file)
word.Quit()
print("文件全部处理完成")