Python办公自动化之调用PowerPoint实现批量PPT转PDF

 更新时间:2026年08月21日 09:10:51   作者:Li Ming&  
在日常工作中,我们经常需要将PPT(PPTX/PPT)批量转成 PDF,今天小编就用Python的 comtypes 库,直接调用你电脑上安装的Microsoft PowerPoint,一键完成批量转换,感兴趣的小伙伴可以了解下

 前言:上一期我们讲了如何把 PDF 转成图片,很多读者反馈非常实用。今天接着安排PPT(PPTX/PPT)批量转成 PDF!

在日常工作中,我们经常需要:把收集来的演示文稿统一转成PDF发给客户(防止格式错乱);打印PPT时,PDF更稳定、方便, 将PPT存档为PDF,方便日后查阅。虽然WPS、Office都自带“另存为PDF”功能,但如果手头有几十上百个PPT,手动打开、点击保存、关闭……不仅枯燥,还容易漏文件。

今天我就用Python的 comtypes 库,直接调用你电脑上安装的Microsoft PowerPoint,一键完成批量转换!关键的是,代码完全动态路径,不管你的文件夹放在哪里,拿来就能用。

一、环境配置

1.1运行环境

  • 操作系统:Windows(因为用到了COM组件,Mac/Linux不支持,除非装了Wine)
  • Python版本:Python 3.6+
  • 必备软件:必须安装 Microsoft PowerPoint(Office套件之一,WPS理论上支持COM但兼容性稍差,建议用微软Office)

1.2安装依赖库

只需要安装一个库——comtypes(用于调用Windows COM对象):

pip install comtypes -i https://pypi.tuna.tsinghua.edu.cn/simple

特别提醒comtypes 只是一个“电话线”,真正干活的是你电脑里的PowerPoint程序,所以不需要额外装插件

二、 完整代码及实现原理

创建一个Python文件(比如 ppt_to_pdf.py),实现原理如下:

2.1路径获取

 需要注意的是PDF的存放路径必须是在你文件代码的同一路径下。

# -*- coding: utf-8 -*-

'''
Python批量将PPT文件转为PDF文件
功能:自动识别当前目录(或指定子文件夹)下所有PPT/PPTX,转为PDF并保存到指定输出目录
'''

# 安装所需模块
# pip install comtypes -i https://pypi.tuna.tsinghua.edu.cn/simple

import comtypes.client
import os             #导入一个正则表达式的模块


def init_powerpoint():
    '''初始化PPT应用程序'''
    powerpoint = comtypes.client.CreateObject("Powerpoint.Application")
    powerpoint.Visible = 1  # 设置为可见,方便观察(可改为0后台运行)
    return powerpoint


def ppt_to_pdf(powerpoint, input_path, output_dir):
    '''
    将单个PPT转换为PDF
    input_path: PPT文件的完整路径
    output_dir: PDF输出目录
    '''
    deck = powerpoint.Presentations.Open(input_path)
    # 构造输出文件名:取PPT文件名,扩展名改为.pdf
    base_name = os.path.splitext(os.path.basename(input_path))[0] + ".pdf"
    output_path = os.path.join(output_dir, base_name)

    # 确保输出目录存在
    os.makedirs(output_dir, exist_ok=True)

    # 32 表示另存为 PDF 格式
    deck.SaveAs(output_path, 32)
    deck.Close()
    print(f'✅ 转换成功:{input_path} → {output_path}')


def convert_ppt_in_folder(powerpoint, input_dir, output_dir):
    '''
    批量转换文件夹内所有PPT/PPTX
    input_dir: 包含PPT文件的目录
    output_dir: PDF输出目录
    '''
    if not os.path.exists(input_dir):
        print(f'❌ 输入目录不存在:{input_dir}')
        return

    files = os.listdir(input_dir)
    ppt_files = [f for f in files if f.lower().endswith((".ppt", ".pptx"))]

    if not ppt_files:
        print('❌ 未找到任何PPT或PPTX文件')
        return

    print(f'📂 找到 {len(ppt_files)} 个PPT文件,开始转换...')
    for ppt_file in ppt_files:
        full_path = os.path.join(input_dir, ppt_file)
        try:
            ppt_to_pdf(powerpoint, full_path, output_dir)
        except Exception as e:
            print(f'❌ 转换 {ppt_file} 时出错:{e}')
    print('🎉 所有PPT转换完成!')


if __name__ == "__main__":
    # ---------- 修改点:全部使用动态路径 ----------
    # 获取当前脚本所在目录
    script_dir = os.path.dirname(os.path.abspath(__file__))

    # 输入目录:默认使用脚本所在目录(你也可以改成子文件夹,比如 os.path.join(script_dir, 'ppt_files'))
    pptpath = script_dir

    # 输出目录:在脚本所在目录下新建一个 'pdf_output' 文件夹
    imgpath = os.path.join(script_dir, 'pdf_output')

    # 初始化PPT应用
    powerpoint = init_powerpoint()
    convert_ppt_in_folder(powerpoint, pptpath, imgpath)
    powerpoint.Quit()

三、代码逐段精讲

3.1 动态路径——彻底摆脱盘符困扰

script_dir = os.path.dirname(os.path.abspath(__file__))
pptpath = script_dir
imgpath = os.path.join(script_dir, 'pdf_output')

很多新手写代码喜欢写死 D:\Users\xxx,换个文件夹就要改代码。我用 __file__ 自动获取脚本所在位置,并且输出目录自动设为当前目录下的 pdf_output 子文件夹。你把脚本和PPT放在任意地方,运行后都在本地生成结果,干净又整洁。

3.2 核心参数32——PPT转PDF的关键密码

deck.SaveAs(output_path, 32)

在PowerPoint的VBA常量中,ppSaveAsPDF 对应的值就是 32。这个数字告诉PowerPoint:“我要另存为PDF格式!” 其他常用格式:

  • 17 → 转为图片(PNG/JPG)
  • 1 → 转为PPT模板(.pot)

记住这个数字,以后你想转其他格式也方便。

3.3后台静默运行(可选)

powerpoint.Visible = 1
  • Visible = 1:你会看到PowerPoint窗口反复弹出打开、保存、关闭,方便你观察进度(适合调试)。
  • 如果改成 Visible = 0:全程在后台静默运行,不影响你干别的事(适合挂机批量跑)。

四、重点:避坑指南

显示 :OSError: [WinError -2147221005] 无效的类字符串

原因:你的电脑没有安装Microsoft PowerPoint,或者安装的是WPS但WPS的COM注册名不标准。

解决方案

  • 确认系统已安装 Office 2010+(含PowerPoint)。
  • 如果装了WPS,可以尝试修改代码中的创建对象名为 "KWPP.Application"(WPS的COM名称),但兼容性不如微软Office稳定,强烈建议换Office。

到此这篇关于Python办公自动化之调用PowerPoint实现批量PPT转PDF的文章就介绍到这了,更多相关Python PPT批量转PDF内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解python opencv图像混合算术运算

    详解python opencv图像混合算术运算

    这篇文章主要介绍了python opencv图像混合算术运算的相关知识,本文通过实例图文相结合给大家介绍的非常详细,需要的朋友可以参考下
    2021-09-09
  • python定义具名元组实例操作

    python定义具名元组实例操作

    在本篇文章里小编给大家分享的是一篇关于python定义具名元组实例操作内容,有兴趣的朋友们可以学习下。
    2021-02-02
  • python opencv将表格图片按照表格框线分割和识别

    python opencv将表格图片按照表格框线分割和识别

    这篇文章主要介绍了python opencv将表格图片按照表格框线分割和识别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • 浅谈flask中的before_request与after_request

    浅谈flask中的before_request与after_request

    这篇文章主要介绍了浅谈flask中的before_request与after_request,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • 使用Python的Django框架结合jQuery实现AJAX购物车页面

    使用Python的Django框架结合jQuery实现AJAX购物车页面

    这篇文章主要介绍了使用Python的Django框架结合jQuery实现AJAX购物车页面的方法,示例基于Django中构建好的JSON格式的RESTful API需要的朋友可以参考下
    2016-04-04
  • 教你使用Python画棵圣诞树完整代码

    教你使用Python画棵圣诞树完整代码

    圣诞节快到了,今天小编通过代码画颗圣诞树,主要通过t.pensize(10) 修改画笔大小,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2021-12-12
  • Python Tkinter基础控件用法

    Python Tkinter基础控件用法

    这篇文章主要介绍了Python Tkinter基础控件用法,包括窗口的显示、显示内置图片、弹出窗口、菜单等等,需要的朋友可以参考下
    2014-09-09
  • Python实现将mp3音频格式转换为wav格式

    Python实现将mp3音频格式转换为wav格式

    这篇文章主要介绍了利用python写了这个小工具,可以批量进行mp3音频格式转换为wav格式,文中的示例代码讲解详细,感兴趣的可以学习一下
    2022-01-01
  • Python的多维空数组赋值方法

    Python的多维空数组赋值方法

    下面小编就为大家分享一篇Python的多维空数组赋值方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • Python循环语句介绍

    Python循环语句介绍

    大家好,本篇文章主要讲的是Python循环语句介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12

最新评论