You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python pptx复制PPT文件?已实现文本提取,需生成同格式新文件

实现PPT文本与格式复制的思路及代码

核心逻辑

要生成和原PPT格式一致的新文件,不能只提取文本,得同步保留结构框架和文本格式,步骤如下:

  1. 复用原PPT的版式模板,直接继承幻灯片布局、母版样式,避免手动重建结构。
  2. 读取原PPT时,不仅存文本内容,还要记录每个文本片段(run)所在的幻灯片、形状、段落位置,以及字体、字号、对齐方式等格式信息。
  3. 在新PPT的对应位置,逐一还原文本内容和格式。

完整代码示例

第一步:读取原PPT的文本与格式信息

from pptx import Presentation

# 读取原PPT并记录文本及对应格式、位置
prs = Presentation('test.pptx')
text_records = []

for slide_idx, slide in enumerate(prs.slides):
    for shape_idx, shape in enumerate(slide.shapes):
        if not shape.has_text_frame:
            continue
        for para_idx, paragraph in enumerate(shape.text_frame.paragraphs):
            # 记录段落格式(对齐、行距)
            para_style = {
                'alignment': paragraph.alignment,
                'line_spacing': paragraph.line_spacing
            }
            for run_idx, run in enumerate(paragraph.runs):
                # 记录文本片段的格式
                run_style = {
                    'font_name': run.font.name,
                    'font_size': run.font.size,
                    'bold': run.font.bold,
                    'italic': run.font.italic,
                    'font_color': run.font.color.rgb if run.font.color.rgb else None
                }
                text_records.append({
                    'slide_idx': slide_idx,
                    'shape_idx': shape_idx,
                    'para_idx': para_idx,
                    'run_idx': run_idx,
                    'text': run.text,
                    'para_style': para_style,
                    'run_style': run_style
                })

第二步:创建新PPT并还原内容与格式

# 基于原PPT模板创建新演示文稿,保留原版式结构
new_prs = Presentation('test.pptx')

# 遍历记录,填充文本与格式
for record in text_records:
    slide = new_prs.slides[record['slide_idx']]
    shape = slide.shapes[record['shape_idx']]
    if not shape.has_text_frame:
        continue
    
    # 确保段落存在(原结构一致时一般无需此判断,做兼容用)
    while len(shape.text_frame.paragraphs) <= record['para_idx']:
        shape.text_frame.add_paragraph()
    paragraph = shape.text_frame.paragraphs[record['para_idx']]
    # 还原段落格式
    paragraph.alignment = record['para_style']['alignment']
    paragraph.line_spacing = record['para_style']['line_spacing']
    
    # 确保文本片段(run)存在
    while len(paragraph.runs) <= record['run_idx']:
        paragraph.add_run()
    run = paragraph.runs[record['run_idx']]
    # 设置文本内容
    run.text = record['text']
    # 还原字体格式
    run.font.name = record['run_style']['font_name']
    run.font.size = record['run_style']['font_size']
    run.font.bold = record['run_style']['bold']
    run.font.italic = record['run_style']['italic']
    if record['run_style']['font_color']:
        run.font.color.rgb = record['run_style']['font_color']

# 保存新PPT
new_prs.save('new_test.pptx')

关键说明

  • 用原PPT作为新文稿的模板,能直接保留所有幻灯片版式、母版样式,保证结构和原文件完全一致。
  • 记录位置索引(幻灯片、形状、段落、run的索引)是为了精准对应文本位置,避免内容错位。
  • 代码中跳过了无文本框的形状(比如图片),符合你忽略图片的需求。
  • 兼容原PPT中的占位符(标题、内容占位符),因为占位符属于shape的一种,同样支持text_frame操作。

内容的提问来源于stack exchange,提问作者MrEpic0

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 13:55:20