Python实现从PPT提取图片和文本

 更新时间:2026年04月23日 08:22:43   作者:LSTM97  
在日常办公和数据处理中,我们经常需要从 PowerPoint 演示文稿中提取素材,下面我们就来看看如何使用 Python 轻松实现从 PPT 中提取图片和文本吧

在日常办公和数据处理中,我们经常需要从 PowerPoint 演示文稿中提取素材,比如图片和文本内容。手动复制粘贴不仅效率低,还容易出错。今天,我就来介绍如何使用 Python 轻松实现从 PPT 中提取图片和文本。

准备工作

首先,你需要安装 Spire.Presentation for Python。可以通过 pip 命令进行安装:

pip install Spire.Presentation

安装完成后,就可以开始编写代码了。

从 PPT 中提取图片

很多时候,PPT 里的图片是我们需要的素材。下面的代码演示了如何批量提取 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.Save(ImageName)

ppt.Dispose()

代码解析:

  • Presentation():创建 PPT 文档对象
  • LoadFromFile():加载需要处理的 PPT 文件
  • ppt.Images:获取文档中所有图片的集合
  • image.Image.Save():将图片保存为 PNG 格式

运行后,所有图片会按顺序保存到 ExtractImage 文件夹下,命名为 Images_0.png、Images_1.png 等。

从 PPT 中提取文本

除了图片,提取文本内容也是常见需求。下面的代码可以遍历每一张幻灯片,提取所有形状中的文字:

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:获取形状中的段落集合
  • 最终将所有文本写入 SlideText.txt 文件,每行一个段落

注意事项

资源释放 :使用完 Presentation 对象后,务必调用 Dispose() 方法释放资源,避免内存泄漏。

文件路径 :确保 PPT 文件路径正确,保存图片和文本的目录需要提前创建或使用代码自动创建。

文本编码 :写入文本文件时使用 utf-8 编码,可以正确处理中文等非英文字符。

图片格式 :Save() 方法保存的图片默认为 PNG 格式,如需其他格式可以参考官方文档。

形状类型 :文本提取时只处理了 IAutoShape 类型,如果文本位于表格、图表等其他形状中,需要额外处理。

方法补充

下面是一个使用 Python 从 PowerPoint(.pptx 文件)中提取所有文本和图片的完整解决方案。核心依赖是 python-pptx 库,它能高效解析 Office Open XML 格式的 PPTX 文件。

1.安装依赖

pip install python-pptx pillow
  • python-pptx:用于解析 PPTX 文件,提取文本框、表格、形状中的文本,以及图片对象。
  • Pillow:用于处理提取出的图片(保存到文件)。

2.功能实现

以下代码会:

  • 打开 PPTX 文件;
  • 遍历每一张幻灯片;
  • 提取所有形状中的文本(包括标题、正文、表格单元格、文本框等);
  • 提取所有图片,并保存为 PNG 格式到指定文件夹。
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.save(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_frameshape.has_tableshape.has_chart 等属性,提取其中的文字内容。
图片提取判断 shape.shape_type == MSO_SHAPE_TYPE.PICTURE,然后通过 shape.image.blob 获取原始字节流,再用 Pillow 保存。
输出组织文本按幻灯片顺序写入一个 .txt 文件;图片单独保存在 images 子目录下,文件名包含所在幻灯片索引和形状 ID。

总结

通过 Spire.Presentation for Python,我们可以用十几行代码就完成 PPT 中图片和文本的批量提取工作。这个库功能强大且易于使用,非常适合自动化办公场景。希望这篇文章能帮助你提高工作效率!

如果你有更多关于 PPT 自动化处理的需求,比如创建 PPT、修改内容、添加图表等,Spire.Presentation 还提供了更多丰富的功能等待你去探索。

到此这篇关于Python实现从PPT提取图片和文本的文章就介绍到这了,更多相关Python提取PPT图片和文本内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python类的继承用法示例

    Python类的继承用法示例

    这篇文章主要介绍了Python类的继承用法,结合实例形式分析了Python类的定义、继承等相关操作技巧,需要的朋友可以参考下
    2019-01-01
  • Python爬虫数据处理模块的安装使用教程

    Python爬虫数据处理模块的安装使用教程

    这篇文章主要为大家介绍了Python爬虫数据处理模块的安装使用教程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • pyinstaller使用大全

    pyinstaller使用大全

    这篇文章主要介绍了pyinstaller使用大全,pyinstaller可以方便地将脚本编译成exe,本文结合实例代码给大家详细讲解,需要的朋友可以参考下
    2023-02-02
  • 深入掌握Python模块创建导入和使用

    深入掌握Python模块创建导入和使用

    这篇文章主要为大家介绍了深入掌握Python模块创建导入和使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • Python爬虫爬取王者荣耀英雄信息并保存到图数据库的操作方法

    Python爬虫爬取王者荣耀英雄信息并保存到图数据库的操作方法

    本文介绍了如何使用Python爬虫技术从王者荣耀官方获取英雄信息,并将数据保存到图数据库中,文章详细说明了爬取英雄名称、类型及皮肤名称的过程,并展示了创建英雄类型节点和英雄信息节点的方法
    2024-09-09
  • Django项目定期自动清除过期session的2种方法实例

    Django项目定期自动清除过期session的2种方法实例

    如果用户主动退出,session会自动清除,如果没有退出就一直保留,记录数越来越大,要定时清理没用的session,下面这篇文章主要给大家介绍了关于Django项目定期自动清除过期session的2种方法,需要的朋友可以参考下
    2022-08-08
  • python SQLAlchemy的Mapping与Declarative详解

    python SQLAlchemy的Mapping与Declarative详解

    这篇文章主要介绍了python SQLAlchemy的Mapping与Declarative详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • pytorch常用函数之torch.randn()解读

    pytorch常用函数之torch.randn()解读

    这篇文章主要介绍了pytorch常用函数之torch.randn()解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • Python使用Matplotlib绘制多个Y轴刻度的代码示例

    Python使用Matplotlib绘制多个Y轴刻度的代码示例

    Matplotlib是一个功能强大的Python库,在它的帮助下,我们可以绘制条形图,图表,绘图,比例等,在本文中,我们将尝试在Matplotlib中绘制多个Y轴刻度,感兴趣的小伙伴跟着小编一起来看看吧
    2025-01-01
  • PyQt实现界面翻转切换效果

    PyQt实现界面翻转切换效果

    这篇文章主要为大家详细介绍了PyQt实现界面翻转切换效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-04-04

最新评论