使用Python实现将ppt文件批量转化为pdf
使用pywin32模块完成主要功能,程序整体实现思路
1. 初始化PowerPoint 端口应用程序
2. 使用应用程序对象打开ppt文件
3. 将ppt文件直接转存为PDF文件
特点:在后台运行,不需要将应用程序端口可视化,避免了comtypes带来的必须在前台运行的尴尬境地。
废话不多说直接开始整。(完整代码在最后面)
一、首先需要安装pywin32模块
1 $ pip install pywin32
如果上述命令安装失败可以尝试一下方法:
$ python -m pip install pypiwin32
二、导入PowerPoint类库,也可以理解为初始化PowerPoint应用实例
p = gencache.EnsureDispatch("PowerPoint.Application")
三、使用应用程序对象打开ppt文件
ppt = p.Presentations.Open(filename, False, False, False)
Presentations: Presentations是PowerPoint应用程序的一个对象。Microsoft PowerPoint 中所有Presentation对象的集合。 每个演示文稿对象代表当前在 PowerPoint 中打开演示文稿。
Open方法:
参数
名称必需/可选数据类型说明
FileName
必需
string
要打开的文件名。
ReadOnly
可选
bool
指定是以可读/写状态还是以只读状态打开文件。
Untitled
可选
bool
指定文件是否有标题。
WithWindow
可选
bool
指定文件是否可见。
四、将ppt文件转存为pdf文件
ppt.ExportAsFixedFormat(exportfile, 2, PrintRange=
ExportAsFixedFormat:将 Microsoft PowerPoint 演示文稿的副本发布为固定格式的文件(PDF 或 XPS)。
有关ExportAsFixedFormat说明及参数可以访问微软官方ExportAsFixedFormat说明,下面列举部分参数,感兴趣的可以再参考一下。
参数
名称必需/可选数据类型说明
路径
必需
String
用于导出的路径。
FixedFormatType
必需
PpFixedFormatType
导出幻灯片时应采用的格式。
Intent
可选
PpFixedFormatIntent
导出的目的。
FrameSlides
可选
MsoTriState
要导出的幻灯片是否应当带有边框。
HandoutOrder
可选
PpPrintHandoutOrder
打印讲义时应遵循的顺序。
OutputType
可选
PpPrintOutputType
输出的类型。
PrintHiddenSlides
可选
MsoTriState
是否打印隐藏的幻灯片。
PrintRange
可选
PrintRange
幻灯片范围。
RangeType
可选
PpPrintRangeType
幻灯片范围的类型。
SlideShowName
可选
String
幻灯片放映的名称。
IncludeDocProperties
可选
Boolean
是否还应导出的文档属性。 默认值为 False 。
KeepIRMSettings
可选
Boolean
是否还应导出 IRM 设置。 默认值为 True 。
DocStructureTags
可选
Boolean
是否包括文档结构标记,以改进文档的辅助功能。 默认值为 True 。
BitmapMissingFonts
可选
Boolean
是否包含文本的位图。 默认值为 True 。
UseISO19005_1
可选
Boolean
所得到的文档是否符合 ISO 19005 1 (PDF/A)。 默认值为 False 。
ExternalExporter
Optional
Variant
一个指向 Office 加载项实现 IMsoDocExporter COM 接口,并允许对备用实现的代码的调用。 默认值是一个空指针。
五、完整代码,需要的可以直接复制到需要转化的ppt文件目录下面
importosimportglobfrom win32com.client importgencachedefget_file_path():"""获得当前文件夹下的所有的.ppt和.pptx文件"""file_path= os.path.split(os.path.abspath(__file__))[0]
pp_files= glob.glob(os.path.join(file_path, "*.ppt*"))returnfile_path, pp_filesdefppt_to_pdf(filename, results):'''ppt 和 pptx 文件转换'''name= os.path.basename(filename).split('.')[0] + '.pdf'exportfile=os.path.join(results, name)ifos.path.isfile(exportfile):print(name, "已经转化了")returnp= gencache.EnsureDispatch("PowerPoint.Application")try:
ppt=p.Presentations.Open(filename, False, False, False)exceptException as e:print(os.path.split(filename)[1], "转化失败,失败原因%s" %e)
ppt.ExportAsFixedFormat(exportfile,2, PrintRange=None)print('保存 PDF 文件:', exportfile)
p.Quit()defmain():"""主程序执行"""file_path, pp_files=get_file_path()
results= os.path.join(file_path, "results")if notos.path.exists(results):
os.mkdir(os.path.join(results))for _ inpp_files:
ppt_to_pdf(_, results)if __name__ == "__main__":
main()