发布于2026-07-15 阅读(0)
扫一扫,手机访问
在日常办公和数据处理中,从PowerPoint演示文稿中提取素材,比如图片和文本内容,是一件频率极高的事情。手动复制粘贴不仅效率低下,还容易出错。用Python来处理这个任务,其实比想象中要简单得多。

先把依赖库装上。这里用到的是Spire.Presentation for Python,用pip就能直接安装:
pip install Spire.Presentation
搞定之后,就可以动手写代码了。
很多时候,PPT里的图片才是真正想要的核心素材。下面的代码演示了如何一次性提取所有图片并保存到本地:
from spire.presentation.common import *
from spire.presentation import *
# 创建 Presentation 实例
ppt = Presentation()
# 加载 PowerPoint 文档
ppt.LoadFromFile("sample.pptx")
# 遍历文档中的所有图片
for i, image in enumerate(ppt.Images):
# 提取并保存图片
ImageName = "ExtractImage/Images_" + str(i) + ".png"
image.Image.Sa ve(ImageName)
ppt.Dispose()
代码解析:
Presentation():创建一份PPT文档对象。LoadFromFile():加载你要处理的文件。ppt.Images:拿到文档里所有的图片集合。image.Image.Sa ve():将图片保存为PNG格式。执行完毕后,所有图片会按顺序存入 ExtractImage 目录,命名如 Images_0.png、Images_1.png,一目了然。
图片之外,提取文字内容也是高频需求。这段代码会遍历每一张幻灯片,把里面能读到的文字统统抓出来:
from spire.presentation import *
from spire.presentation.common import *
# 创建 Presentation 对象
pres = Presentation()
# 加载 PowerPoint 演示文稿
pres.LoadFromFile("Sample.pptx")
text = []
# 遍历每一张幻灯片
for slide in pres.Slides:
# 遍历每个形状
for shape in slide.Shapes:
# 判断形状是否为 IAutoShape 类型(可包含文本)
if isinstance(shape, IAutoShape):
# 提取形状中的文本
for paragraph in shape.TextFrame.Paragraphs:
text.append(paragraph.Text)
# 将提取的文本写入文件
with open("output/SlideText.txt", "w", encoding='utf-8') as f:
for s in text:
f.write(s + "\n")
pres.Dispose()
代码解析:
pres.Slides:拿到所有幻灯片的集合。slide.Shapes:遍历每页里的所有形状。IAutoShape:代表可以包含文本的自动形状类型。shape.TextFrame.Paragraphs:获取形状中的段落集合。资源释放:用完后务必调用 Dispose() 清理资源,别让内存泄漏给你添麻烦。
文件路径:确保PPT路径正确,保存目录最好提前创建好,或者让代码自动生成。
文本编码:写入文件时用 utf-8 编码,这样中文和其他非英文字符都能正常显示。
图片格式:Sa ve() 默认存成 PNG。如果想要其他格式,可以去翻翻官方文档。
形状类型:上面的文本提取只处理了 IAutoShape。如果文字在表格、图表等其他形状里,需要额外处理。
除了 Spire.Presentation,还有一个更轻量的选择——python-pptx。它专攻 Office Open XML 格式(.pptx),解析起来非常高效。
1. 安装依赖
pip install python-pptx pillow
python-pptx:用于解析PPTX文件,提取文本框、表格、形状中的文本以及图片对象。Pillow:用来处理提取出的图片并保存到文件。2. 功能实现
下面的代码会完成这些工作:
import os
from pptx import Presentation
from pptx.enum.shapes import MSO_SHAPE_TYPE
from PIL import Image
import io
def extract_text_and_images(pptx_path, output_dir="extracted"):
"""
从 PPTX 文件中提取所有文本和图片
:param pptx_path: PPTX 文件路径
:param output_dir: 输出目录(文本文件和图片文件夹)
"""
# 创建输出目录
os.makedirs(output_dir, exist_ok=True)
img_dir = os.path.join(output_dir, "images")
os.makedirs(img_dir, exist_ok=True)
# 加载 PPT
prs = Presentation(pptx_path)
# 用于保存所有文本的列表
all_text = []
# 遍历每一张幻灯片
for slide_idx, slide in enumerate(prs.slides, start=1):
slide_text = []
slide_text.append(f"--- 幻灯片 {slide_idx} ---")
# 遍历幻灯片中的所有形状
for shape in slide.shapes:
# --- 提取文本 ---
# 1. 文本框或自选图形中的文本
if shape.has_text_frame:
for paragraph in shape.text_frame.paragraphs:
for run in paragraph.runs:
if run.text.strip():
slide_text.append(run.text)
# 2. 表格中的文本
if shape.has_table:
table = shape.table
for row in table.rows:
row_text = []
for cell in row.cells:
if cell.text.strip():
row_text.append(cell.text.strip())
if row_text:
slide_text.append(" | ".join(row_text))
# 3. 图表中的文本(简单提取标题)
if shape.has_chart:
chart = shape.chart
if chart.has_title:
title = chart.chart_title.text_frame.text
if title.strip():
slide_text.append(f"图表标题: {title}")
# --- 提取图片 ---
if shape.shape_type == MSO_SHAPE_TYPE.PICTURE:
# 获取图片的二进制数据
image_stream = shape.image.blob
# 生成图片文件名
img_filename = f"slide_{slide_idx}_img_{shape.shape_id}.png"
img_path = os.path.join(img_dir, img_filename)
# 使用 Pillow 保存图片
img = Image.open(io.BytesIO(image_stream))
img.sa ve(img_path)
slide_text.append(f"[图片已保存: {img_path}]")
# 将当前幻灯片的文本加入总文本
all_text.extend(slide_text)
all_text.append("") # 空行分隔
# 保存所有文本到文件
txt_path = os.path.join(output_dir, "extracted_text.txt")
with open(txt_path, "w", encoding="utf-8") as f:
f.write("\n".join(all_text))
print(f"提取完成!")
print(f"文本保存至: {txt_path}")
print(f"图片保存至: {img_dir}")
# 使用示例
if __name__ == "__main__":
extract_text_and_images("example.pptx", output_dir="my_extraction")
3. 关键点说明
| 功能 | 实现方式 |
|---|---|
| 文本提取 | 检查 shape.has_text_frame、shape.has_table、shape.has_chart 等属性,提取其中的文字内容。 |
| 图片提取 | 判断 shape.shape_type == MSO_SHAPE_TYPE.PICTURE,然后通过 shape.image.blob 获取原始字节流,再用 Pillow 保存。 |
| 输出组织 | 文本按幻灯片顺序写入一个 .txt 文件;图片单独保存在 images 子目录下,文件名包含所在幻灯片索引和形状 ID。 |
借助 Spire.Presentation for Python,十几行代码就能搞定PPT中图片和文本的批量提取。这个库功能扎实,上手轻松,非常适合自动化办公场景。希望这篇文章能帮你省下那些重复劳动的时间。
如果还有更多PPT自动化的需求,比如创建、修改内容,甚至加图表,Spire.Presentation 还有不少能力等着你去发掘。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8