通过python-pptx
和Spire.Presentation
两种库完成。
一、使用python-pptx
库(开源方案)
1. 基础母版操作
通过slide_master
属性访问母版对象,支持修改占位符、背景、字体等全局样式:
from pptx import Presentation
prs = Presentation("input.pptx")
master = prs.slide_master
# 修改母版背景颜色
master.background.fill.solid()
master.background.fill.fore_color.rgb = RGBColor(255, 255, 255) # 白色背景
# 替换母版中的占位符文本
title_placeholder = master.placeholders[1] # 标题占位符索引可能需调整
title_placeholder.text = "新标题模板"
# 保存修改
prs.save("output.pptx")
适用场景:简单文本替换、全局颜色/字体调整。
2. 布局级替换
针对特定幻灯片布局(如标题页、内容页)进行差异化修改:
layout = prs.slide_layouts[1] # 选择目标布局(如标题+内容)
layout.placeholders[2].text = "内容页副标题模板" # 修改布局内占位符
注意:需遍历所有幻灯片并应用新布局:
for slide in prs.slides:
slide.layout = layout
二、使用Spire.Presentation
库(商业方案)
该库提供更强大的母版管理功能,支持多母版嵌套和复杂样式设置:
from spire.presentation import *
# 创建演示文稿并添加母版
prs = Presentation()
master = prs.SlideMasters[0]
new_master = prs.SlideMasters.Append(master) # 复制母版
# 设置新母版背景图片
pic_path = "background.jpg"
rect = RectangleF(0, 0, prs.SlideSize.Size.Width, prs.SlideSize.Size.Height)
new_master.Shapes.AppendEmbedImage(ShapeType.Rectangle, pic_path, rect)
# 应用新母版到指定幻灯片
slide = prs.Slides[0]
slide.Layout = new_master.Layouts[0] # 选择母版中的具体版式
prs.SaveToFile("output.pptx", FileFormat.Pptx2013)
优势:支持批量应用不同母版、复杂图形操作,适合企业级模板生成。
三、混合方案(win32com
+python-pptx
)
对于需要深度操作PPT对象模型(如VBA脚本交互)的场景,可结合两者:
import win32com.client
from pptx import Presentation
# 使用win32com复制母版页
ppt = win32com.client.Dispatch("PowerPoint.Application")
prs = ppt.Presentations.Open("template.pptx")
prs.Slides(1).Copy() # 复制母版页到新位置
# 转换为python-pptx对象进行内容替换
new_prs = Presentation("template.pptx")
for slide in new_prs.slides:
if slide.shapes.title.text == "旧标题":
slide.shapes.title.text = "新标题"
适用场景:需兼容VBA宏或处理复杂动画/SmartArt时。
四、关键注意事项
占位符索引匹配
不同PPT模板的占位符索引可能不同,需通过调试确认目标索引(如placeholders
可能对应副标题)。样式继承机制
母版修改后,需确保所有子布局同步更新,避免样式残留:for layout in master.Layouts: layout.TextStyles.Font.Color.RGB = RGBColor(0, 0, 0) # 统一正文颜色
性能优化
处理大型PPT时建议:- 使用
io.BytesIO
内存操作减少IO开销 - 禁用实时渲染:
prs.SaveOptions.SuppressRefresh = True
- 使用
五、扩展
- 批量替换:结合正则表达式实现多语言模板切换。
- 数据驱动:从Excel读取数据自动填充母版变量。
- 自动化测试:通过截图比对验证母版替换结果。