商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > Python实现从PPT提取图片和文本

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

  发布于2026-07-15 阅读(0)

扫一扫,手机访问

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

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

准备工作

先把依赖库装上。这里用到的是Spire.Presentation for Python,用pip就能直接安装:

pip install Spire.Presentation

搞定之后,就可以动手写代码了。

从 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.Sa ve(ImageName)

ppt.Dispose()

代码解析:

  • Presentation():创建一份PPT文档对象。
  • LoadFromFile():加载你要处理的文件。
  • ppt.Images:拿到文档里所有的图片集合。
  • image.Image.Sa ve():将图片保存为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,每个段落独立一行。

注意事项

资源释放:用完后务必调用 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. 功能实现

下面的代码会完成这些工作:

  • 打开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.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_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自动化的需求,比如创建、修改内容,甚至加图表,Spire.Presentation 还有不少能力等着你去发掘。

本文转载于:https://www.jb51.net/python/362652xgz.htm 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注