使用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文件目录下面
import os
import glob
from win32com.client import Dispatch, constants, gencache, DispatchEx


def get_file_path():
    """
    获得当前文件夹下的所有的.ppt和.pptx文件
    """
    file_path = os.path.split(os.path.abspath(__file__))[0]
    pp_files = glob.glob(os.path.join(file_path, "*.ppt*"))
    return file_path, pp_files

def ppt_to_pdf(filename, results):
    '''
    ppt 和 pptx 文件转换
    '''
    name = os.path.basename(filename).split('.')[0] + '.pdf'
    exportfile = os.path.join(results, name)
    if os.path.isfile(exportfile):
        print(name, "已经转化了")
        return
    p = gencache.EnsureDispatch("PowerPoint.Application")
    try:
        ppt = p.Presentations.Open(filename, False, False, False)
    except Exception as e:
        print(os.path.split(filename)[1], "转化失败,失败原因%s" % e)
    ppt.ExportAsFixedFormat(exportfile, 2, PrintRange=None)
    print('保存 PDF 文件:', exportfile)
    p.Quit()

def main():
    """
    主程序执行
    """
    file_path, pp_files = get_file_path()
    results = os.path.join(file_path, "results")
    if not os.path.exists(results):
        os.mkdir(os.path.join(results))
    for _ in pp_files:
        ppt_to_pdf(_, results)

if __name__ == "__main__":
    main()

 

版权声明:本文为Iloveyy原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/Iloveyy/p/13304073.html