github star gitee star atomgit star PyPI Downloads AI编程 AI交流群

大家好,这里是程序员晚枫,正在all in AI编程实战

好的,我来帮你深入学习这个 poppt 项目!让我系统地分析项目的结构、功能和实现细节。
完美!我已经系统地学习了这个 poppt 项目。让我为你总结一下项目的核心知识:

🎯 项目概述

poppt 是一个基于 Python 的 PPT 办公自动化工具库,提供 PPT 转 PDF、PPT 转图片、合并 PPT 等核心功能。


📁 项目结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
poppt/
├── poppt/ # 核心包
│ ├── __init__.py # 包入口,导出所有API
│ ├── api/
│ │ └── ppt.py # API接口层(用户调用的函数)
│ ├── core/
│ │ ├── PPTType.py # 核心业务逻辑类 MainPPT
│ │ └── need_dev/ # 待开发功能
│ └── lib/ppt/
│ └── ppt2pdf_service.py # PPT转PDF底层服务
├── demo/ # 示例代码
├── tests/ # 单元测试
├── setup.py # 打包配置(调用setup.cfg)
├── setup.cfg # 包元信息配置
└── requirements.txt # 依赖列表

🔧 技术栈

技术用途说明
pywin32Windows COM操作调用PowerPoint应用程序
Pillow图像处理生成长图、拼接图片
poprogress进度条显示批量处理时显示进度
pofile文件操作文件路径处理、目录创建

运行环境:

  • Python >= 3.7
  • Windows 系统(必须安装 Microsoft PowerPoint)

🚀 三大核心功能

1️⃣ ppt2pdf - PPT转PDF

1
2
3
4
from poppt.api.ppt import ppt2pdf

# 批量转换文件夹下的所有PPT
ppt2pdf(path=r'./ppt文件夹', output_path=r'./pdf输出')

实现原理:

  • 使用 win32com.client 调用 PowerPoint COM 组件
  • 通过 ppt.SaveAs(output_filename, 32) 导出PDF(32是PDF格式代码)
  • 支持单文件和批量转换

2️⃣ ppt2img - PPT转图片

1
2
3
4
5
6
7
from poppt.api.ppt import ppt2img

# 转为独立图片
ppt2img(input_path=r'./test.pptx', output_path=r'./imgs', merge=False)

# 转为长图(合并所有幻灯片)
ppt2img(input_path=r'./test.pptx', output_path=r'./imgs', merge=True)

实现原理:

  • 使用 ppt.SaveAs(output_dir, 17) 导出JPG(17是JPG格式代码)
  • 如果 merge=True,使用 Pillow 将所有图片纵向拼接成长图
  • 自动按文件名创建子目录存放图片

3️⃣ merge4ppt - 合并PPT

1
2
3
4
5
6
from poppt.api.ppt import merge4ppt

# 合并文件夹下的所有PPT
merge4ppt(input_path=r'./ppt文件夹',
output_path=r'./输出',
output_name='合并结果.pptx')

实现原理:

  • 创建新的空白PPT: new_ppt = Application.Presentations.Add()
  • 遍历所有PPT,使用 InsertFromFile 方法将幻灯片插入到新PPT末尾
  • 保存合并后的文件

🏗️ 核心类设计

MainPPT 类 (poppt/core/PPTType.py)

1
2
3
4
5
6
7
8
9
10
class MainPPT():
def __init__(self):
self.app = 'PowerPoint.Application' # PowerPoint COM组件名
self.suffix_list = ["ppt", "pptx"] # 支持的文件类型
self.ppt2img_type = 17 # JPG格式代码

def ppt2pdf(self, path, output_path) # PPT转PDF
def ppt2img(self, input_path, output_path, merge=False) # PPT转图片
def merge4ppt(self, input_path, output_path, output_name) # 合并PPT
def generate_long_image(self, ...) # 生成长图(内部方法)

📦 架构设计模式

三层架构:

  1. API层 (poppt/api/ppt.py): 对外暴露的简洁接口
  2. 业务层 (poppt/core/PPTType.py): 核心业务逻辑
  3. 服务层 (poppt/lib/ppt/): 底层操作服务

优点:

  • ✅ 职责分离,便于维护
  • ✅ 用户只需关注API层
  • ✅ 底层实现可独立优化

🔑 关键技术点

1. Windows COM自动化

1
2
3
4
5
6
7
8
9
10
# 创建PowerPoint应用程序实例
ppt_app = win32com.client.Dispatch('PowerPoint.Application')
ppt_app.Visible = True # 是否显示界面

# 打开PPT
ppt = ppt_app.Presentations.Open(filename, WithWindow=False)

# 另存为不同格式
ppt.SaveAs(output_path, format_code)
# 17=JPG, 18=PNG, 32=PDF

2. 图片拼接算法

1
2
3
4
5
6
# 创建空白画布(n倍高度)
long_canvas = Image.new(img_mode, (width, height * len(img_list)))

# 逐个粘贴图片
for i, image in enumerate(img_list):
long_canvas.paste(Image.open(image), box=(0, i * height))

3. 路径处理 (使用 pathlib)

1
2
3
4
5
6
7
8
9
10
from pathlib import Path

# 相对路径转绝对路径
abs_path = Path(input_path).absolute()

# 获取不带后缀的文件名
stem = Path(filename).stem

# 路径拼接
output = Path(output_path) / new_name

📝 代码规范要点

  1. 注释规范: 每个函数都有详细的 Google 风格文档注释
  2. 工具函数: 使用 pofile 库的工具函数简化代码
    • get_files(): 获取文件列表
    • mkdir(): 创建目录
    • check_suffix(): 检查文件后缀
  3. 进度显示: 批量操作使用 simple_progress() 显示进度条

🧪 测试用例设计

1
2
3
4
5
class TestPPT(unittest.TestCase):
def test_ppt2pdf(self): # 测试PDF转换
def test_single_ppt2img(self): # 测试单文件转图片
def test_mergeppt_list(self): # 测试合并(列表输入)
def test_mergeppt_str(self): # 测试合并(字符串输入)

💡 学习要点总结

  1. COM自动化: 学习如何通过Python操作Windows应用程序
  2. 图像处理: 掌握Pillow库进行图片拼接
  3. 文件操作: 使用pathlib进行现代化路径处理
  4. 打包发布: 理解setup.py/setup.cfg配置和PyPI发布流程
  5. 代码组织: 学习三层架构在实际项目中的应用

📌 注意事项

⚠️ 依赖PowerPoint: 必须在Windows系统上安装Microsoft PowerPoint
⚠️ COM组件: 使用 pywin32 调用COM组件,仅支持Windows
⚠️ 路径问题: 某些操作需要绝对路径,使用 Path().absolute() 转换


这个项目虽然代码量不大,但麻雀虽小五脏俱全,非常适合学习Python办公自动化和项目工程化实践!🎉

🎓 AI 编程实战课程

程序员晚枫专注AI编程培训,通过 《30讲 · AI编程训练营》,让小白也能用AI做出实际项目。帮你从零上手!