python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python提取PPT图片和文本

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

作者: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()

代码解析:

运行后,所有图片会按顺序保存到 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()

代码解析:

注意事项

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

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

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

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

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

方法补充

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

1.安装依赖

pip install python-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.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图片和文本内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文