在平时的工作中,难免需要一些小技巧来解决工作中遇到的问题。今天的文章将为您提供方便快捷的技巧,将Office(doc/docx/ppt/pptx/xls/xlsx)文件批量或单个文件转换为PDF文件。不过在进行具体操作之前,需要先在PC上安装Office,然后使用Python的win32com包来实现Office文件的转换。在安装win32com之前,需要先安装Pythonwin32com。详细安装步骤如下:使用pip命令安装pipinstallpywin32如果遇到安装错误,我们可以通过python-mpipinstall--upgradepip更新云,然后安装。可以:python-mpipinstall--upgradepipdownload离线安装包安装如果pip命令没有安装成功,也可以下载离线包安装,方法步骤如下:先在官方上选择对应的Python版本离线包下载网址:https://sourceforge.net/proje...下载后,傻傻安装即可。文件转换逻辑详细代码如下:classPDFConverter:def__init__(self,pathname,export='.'):self._handle_postfix=['doc','docx','ppt','pptx','xls','xlsx']#支持文件类型转换self._filename_list=list()#列出文件self._export_folder=os.path.join(os.path.abspath('.'),'file_server/pdfconver')如果不是os.path.exists(self._export_folder):os.mkdir(self._export_folder)self._enumerate_filename(pathname)def_enumerate_filename(self,pathname):'''readallfilenames'''full_pathname=os.path.abspath(pathname)ifos.path.isfile(full_pathname):ifself._is_legal_postfix(full_pathname):self._filename_list.append(full_pathname)else:raiseTypeError('文件{}的后缀名不合法!只有下面的支持的文件类型:{}。'.format(pathname,','.join(self._handle_postfix)))elifos.path.isdir(full_pathname):forrelpath,_,filesinos.walk(full_pathname):fornameinfiles:filename=os.path.join(full_pathname,relpath,name)ifself._is_legal_postfix(filename):self._filename_list.append(os.path.join(filename))else:raiseTypeError('文件/文件夹{}不存在或不合法!'.format(pathname))def_is_legal_postfix(self,filename):returnfilename.split('.')[-1].lower()inself._handle_postfix而不是os.path.basename(filename).startswith('~')defrun_conver(self):print('要转换的文件数为:',len(self._filename_list))forfilenameinself._filename_list:postfix=filename.split('.')[-1].lower()funcCall=getattr(self,postfix)print('原始文件:',文件名)funcCall(filename)print('转换完成!')doc/docxConverttoPDFdoc/docxConverttoPDF部分代码如下:defdoc(self,filename):name=os.path.basename(filename).split('.')[0]+'.pdf'exportfile=os.path.join(self._export_folder,name)print('保存PDF文件:',exportfile)gencache.EnsureModule('{00020905-0000-0000-C000-000000000046}',0,8,4)pythoncom.CoInitialize()w=Dispatch("Word.Application")pythoncom.CoInitialize()#防止CoInitialize加载doc=w.Documents.Open(filename)doc.ExportAsFixedFormat(exportfile,constants.wdExportFormatPDF,Item=constants.wdExportDocumentWithMarkup,CreateBookmarks=constants.wdExportCreateHeadingBookmarks)w.Quit(constants.wdDoNotSaveChanges)defdocx(self,filename):self.doc(filename)ppt/pptxtoPDFppt/pptxtoPDF部分代码如下:defppt(self,文件名):name=os.path.basename(filename).split('.')[0]+'.pdf'exportfile=os.path.join(self._export_folder,name)gencache.EnsureModule('{00020905-0000-0000-C000-000000000046}',0,8,4)pythoncom.CoInitialize()p=Dispatch("PowerPoint.Application")pythoncom.CoInitialize()ppt=p.Presentations.Open(filename,False,False,False)ppt.ExportAsFixedFormat(exportfile,2,PrintRange=None)print('保存PDF文件:',exportfile)p.Quit()defpptx(self,filename):self.ppt(filename)xls/xlsx转换为PDFdefxls(self,filename):name=os.path.basename(filename).split('.')[0]+'.pdf'exportfile=os.path.join(self._export_folder,name)pythoncom.CoInitialize()xlApp=DispatchEx("Excel.Application")pythoncom.CoInitialize()xlApp.Visible=FalsexlApp.DisplayAlerts=0本书=xlApp.Workbooks.Open(文件名,False)books.ExportAsFixedFormat(0,exportfile)books.Close(False)print('SavePDFfile:',exportfile)xlApp.Quit()defxlsx(self,filename):self.xls(filename)执行转换逻辑if__name__=="__main__":#支持批量导入文件夹#folder='tmp'#pathname=os.path.join(os.path.abspath('.'),folder)#也支持单个文件的转换pathname="G:/python_study/test.doc"pdfConverter=PDFConverter(pathname)pdfConverter.run_conver()以上就是本次分享的全部内容。想了解更多python知识,请前往公众号:Python编程学习圈,发“J”免费领取,每日干货分享
