python实现word/excel/ppt批量转pdf的示例代码
今天看见了一个有意思的脚本Python批量实现Word、EXCLE、PPT转PDF文件。
因为我平时word用的比较的多,所以深有体会,具体怎么实现的我们就不讨论了,因为这个去学了也没什么提升,不然也不会当作脚本了。这里我将其放入了pyzjr库中,也方便大家进行调用。
你可以去下载pyzjr:
pip install pyzjr -i https://pypi.tuna.tsinghua.edu.cn/simple
调用方法:
import pyzjr as pz # 实例化对象 Mpdf = pz.Microsoft2PDF() # 调用类的方法 Mpdf.Word2Pdf() # word -> pdf Mpdf.Excel2Pdf() # excel -> pdf Mpdf.PPt2Pdf() # ppt -> pdf Mpdf.WEP2Pdf() # word,excel,ppt -> pdf
上面就是api的调用了,统一会将文件存放在目标文件夹下新建的名为pdf文件夹中。
pyzjr中的源码:
import win32com.client, gc, os class Microsoft2PDF(): """Convert Microsoft Office documents (Word, Excel, PowerPoint) to PDF format""" def __init__(self,filePath = ""): """ :param filePath: 如果默认是空字符,就默认当前路径 """ self.flagW = self.flagE = self.flagP = 1 self.words = [] self.ppts = [] self.excels = [] if filePath == "": filePath = os.getcwd() folder = filePath + '\\pdf\\' self.folder = CreateFolder(folder,debug=False) self.filePath = filePath for i in os.listdir(self.filePath): if i.endswith(('.doc', 'docx')): self.words.append(i) if i.endswith(('.ppt', 'pptx')): self.ppts.append(i) if i.endswith(('.xls', 'xlsx')): self.excels.append(i) if len(self.words) < 1: print("\n[pyzjr]:No Word files\n") self.flagW = 0 if len(self.ppts) < 1: print("\n[pyzjr]:No PPT file\n") self.flagE = 0 if len(self.excels) < 1: print("\n[pyzjr]:No Excel file\n") self.flagP = 0 def Word2Pdf(self): if self.flagW == 0: return 0 else: print("\n[Start Word ->PDF conversion]") try: print("Open Word Process...") word = win32com.client.Dispatch("Word.Application") word.Visible = 0 word.DisplayAlerts = False doc = None for i in range(len(self.words)): print(i) fileName = self.words[i] # file name fromFile = os.path.join(self.filePath, fileName) # file address toFileName = self.changeSufix2Pdf(fileName) # Generated file name toFile = self.toFileJoin(toFileName) # Generated file address print("Conversion:" + fileName + "in files...") try: doc = word.Documents.Open(fromFile) doc.SaveAs(toFile, 17) print("Convert to:" + toFileName + "file completion") except Exception as e: print(e) print("All Word files have been printed") print("End Word Process...\n") doc.Close() doc = None word.Quit() word = None except Exception as e: print(e) finally: gc.collect() def Excel2Pdf(self): if self.flagE == 0: return 0 else: print("\n[Start Excel -> PDF conversion]") try: print("open Excel Process...") excel = win32com.client.Dispatch("Excel.Application") excel.Visible = 0 excel.DisplayAlerts = False wb = None ws = None for i in range(len(self.excels)): print(i) fileName = self.excels[i] fromFile = os.path.join(self.filePath, fileName) print("Conversion:" + fileName + "in files...") try: wb = excel.Workbooks.Open(fromFile) for j in range(wb.Worksheets.Count): # Number of worksheets, one workbook may have multiple worksheets toFileName = self.addWorksheetsOrder(fileName, j + 1) toFile = self.toFileJoin(toFileName) ws = wb.Worksheets(j + 1) ws.ExportAsFixedFormat(0, toFile) print("Convert to:" + toFileName + "file completion") except Exception as e: print(e) # 关闭 Excel 进程 print("All Excel files have been printed") print("Ending Excel process...\n") ws = None wb.Close() wb = None excel.Quit() excel = None except Exception as e: print(e) finally: gc.collect() def PPt2Pdf(self): if self.flagP == 0: return 0 else: print("\n[Start PPT ->PDF conversion]") try: print("Opening PowerPoint process...") powerpoint = win32com.client.Dispatch("PowerPoint.Application") ppt = None for i in range(len(self.ppts)): print(i) fileName = self.ppts[i] fromFile = os.path.join(self.filePath, fileName) toFileName = self.changeSufix2Pdf(fileName) toFile = self.toFileJoin(toFileName) print("Conversion:" + fileName + "in files...") try: ppt = powerpoint.Presentations.Open(fromFile, WithWindow=False) if ppt.Slides.Count > 0: ppt.SaveAs(toFile, 32) print("Convert to:" + toFileName + "file completion") else: print("Error, unexpected: This file is empty, skipping this file") except Exception as e: print(e) print("All PPT files have been printed") print("Ending PowerPoint process...\n") ppt.Close() ppt = None powerpoint.Quit() powerpoint = None except Exception as e: print(e) finally: gc.collect() def WEP2Pdf(self): """ Word, Excel and PPt are all converted to PDF. If there are many files, it may take some time """ print("Convert Microsoft Three Musketeers to PDF") self.Word2Pdf() self.Excel2Pdf() self.PPt2Pdf() print(f"All files have been converted, you can find them in the {self.folder}") def changeSufix2Pdf(self,file): """将文件后缀更改为.pdf""" return file[:file.rfind('.')] + ".pdf" def addWorksheetsOrder(self,file, i): """在文件名中添加工作表顺序""" return file[:file.rfind('.')] + "_worksheet" + str(i) + ".pdf" def toFileJoin(self, file): """将文件路径和文件名连接为完整的文件路径""" return os.path.join(self.filePath, 'pdf', file[:file.rfind('.')] + ".pdf")
这里我对原先博主的代码进行了一定的优化,使其可供我们调用。
这是控制台打印出来的信息,我们可以发现在调用WEP2Pdf时,如果当前文件夹中没有word的文件也能继续去转换。
到此这篇关于python实现word/excel/ppt批量转pdf的示例代码的文章就介绍到这了,更多相关python pdf内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Python中利用Scipy包的SIFT方法进行图片识别的实例教程
SIFT算法可以检测图片中的局部特征,算法原理相当复杂...但是!Python强大的第三方包Scipy中带有实现SIFT算法的SIFT方法,我们只要拿来用就可以了,下面就为大家带来Python中利用Scipy包的SIFT方法进行图片识别的实例教程.2016-06-06python3列表删除大量重复元素remove()方法的问题详解
这篇文章主要给大家介绍了关于python3列表删除大量重复元素remove()方法的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2021-01-01
最新评论