如何用Python pptx复制PPT文件?已实现文本提取,需生成同格式新文件
实现PPT文本与格式复制的思路及代码
核心逻辑
要生成和原PPT格式一致的新文件,不能只提取文本,得同步保留结构框架和文本格式,步骤如下:
- 复用原PPT的版式模板,直接继承幻灯片布局、母版样式,避免手动重建结构。
- 读取原PPT时,不仅存文本内容,还要记录每个文本片段(run)所在的幻灯片、形状、段落位置,以及字体、字号、对齐方式等格式信息。
- 在新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
相关产品推荐
相关产品推荐

