好久都没有写过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("文件全部处理完成")