如何使用 C# 提取 PPT 文本与图片

在开发场景中,我们可能会遇到 PPT 文档内容解析 的需求,比如批量提取课件、报告中的文本内容归档,批量导出 PPT 内配图做素材整理等。

原生 .NET 框架并未提供直接解析 PPT 文件的原生 API,手动操作 OpenXML 格式代码冗余、逻辑复杂,且需要处理大量格式兼容问题。而 Free Spire.Presentation for .NET 是一款轻量、免费的 PPT 解析操作库,支持 .NET 全系列版本,能够快速实现 PPT 的文本读取、图片提取、文档解析等核心功能,大幅降低开发成本。

本文将基于 .NET10 语法规范 ,使用 Free Spire.Presentation 实现两大核心功能:

  • 批量提取 PPT 所有幻灯片中的全部文本并导出为 TXT 文件
  • 批量提取 PPT 内嵌的所有图片并保存为 PNG 本地文件

环境准备

开发环境

  • 开发框架:.NET 6+
  • 开发工具:Visual Studio 2022 / Rider
  • 操作对象:.pptx 格式幻灯片文档(兼容主流 PPT 格式)

安装 NuGet 依赖

项目需要引入 Free Spire.Presentation 核心包,在 NuGet 包管理器中搜索安装,或通过命令行安装:

复制代码
Install-Package FreeSpire.Presentation

该包为免费开源版本,满足日常非商用、批量解析 PPT 的开发需求,无强制水印、无营销绑定。

提取 PPT 全部文本

功能说明

遍历 PPT 中所有幻灯片、所有形状组件,筛选文本容器组件,逐段读取文本内容,最终整合所有内容并导出为本地 TXT 文档。代码采用 .NET10 顶级语句、隐式命名空间等极简特性精简,代码更简洁易读。

完整代码

复制代码
using Spire.Presentation;
using System.Text;

// 初始化PPT文档实例并加载目标文件
using Presentation presentation = new();
presentation.LoadFromFile("Island.pptx");

// 初始化文本拼接容器
StringBuilder textBuilder = new();

// 遍历所有幻灯片
foreach (ISlide slide in presentation.Slides)
{
    // 遍历单页幻灯片所有组件
    foreach (IShape shape in slide.Shapes)
    {
        // 筛选文本形状组件并读取段落文本
        if (shape is IAutoShape autoShape)
        {
            foreach (TextParagraph paragraph in autoShape.TextFrame.Paragraphs)
            {
                textBuilder.AppendLine(paragraph.Text);
            }
        }
    }
}

// 导出文本到本地TXT文件
File.WriteAllText("ExtractText.txt", textBuilder.ToString());

代码核心逻辑解析

  1. 资源自动释放 :采用 .NET10 支持的 using 变量声明 语法,无需手动调用 Dispose,程序执行完毕后自动释放 PPT 文件资源,避免文件占用、内存泄漏问题。
  2. 类型模式匹配 :通过 is 变量声明 模式匹配,一步完成类型判断与强制转换,替代传统的先判断类型、再强制转换的冗余写法,是 .NET10 推荐的最优语法。
  3. 分层遍历逻辑 :PPT 文本存储层级为 幻灯片(Slide) -> 形状组件(Shape) -> 文本段落(TextParagraph),通过三层遍历可精准捕获页面内所有文本(标题、正文、备注文本)。
  4. 文本批量导出 :使用 StringBuilder 高效拼接文本,避免字符串频繁拼接的性能损耗,最终一次性写入本地文件。

提取 PPT 内嵌所有图片

功能说明

直接读取 PPT 文档的全局图片资源集合,批量遍历所有内嵌图片,统一导出为 PNG 格式图片文件,自动命名归档,适配批量素材提取场景。

完整代码

复制代码
using Spire.Presentation;
using Spire.Presentation.Collections;

// 初始化并加载PPT文档
using Presentation presentation = new();
presentation.LoadFromFile("Template.pptx");

// 获取PPT所有内嵌图片集合
ImageCollection imageCollection = presentation.Images;

// 遍历图片集合并批量导出
for (int i = 0; i < imageCollection.Count; i++)
{
    // 按索引命名保存图片,避免文件名重复
    string savePath = Path.Combine("Presentation", $"Images{i}.png");
    
    // 创建存储目录(不存在则自动创建)
    Directory.CreateDirectory(Path.GetDirectoryName(savePath)!);
    
    // 保存图片到本地
    imageCollection[i].Image.Save(savePath);
}

代码核心逻辑解析

  1. 全局图片读取 :不同于逐页遍历幻灯片的方式,直接通过 presentation.Images 获取文档所有内嵌图片,无需重复遍历页面,执行效率更高。
  2. 目录自动创建 :新增目录判断逻辑,自动检测图片存储文件夹是否存在,不存在则创建,避免因目录缺失导致的保存失败问题,提升代码健壮性。
  3. .NET10 字符串优化 :使用字符串插值替代传统 string.Format,语法更简洁、可读性更强,是新版 .NET 的推荐写法。
  4. 安全资源释放 :using 语法托管 PPT 实例生命周期,确保文件读取完成后资源彻底释放。

关键注意事项

  • 文件格式适配 :该组件仅支持解析 .pptx 格式文件,老旧 .ppt 格式需先转换格式后再解析。
  • 路径规范 :代码中默认使用相对路径,可根据业务需求修改为绝对路径,适配服务器、桌面等不同运行环境。
  • 特殊内容兼容 :该方案可正常提取普通文本、图片,对于艺术字、背景填充图、加密内容需额外做兼容处理。
  • .NET 版本适配 :本文代码基于 .NET10 极简语法,若需兼容低版本 .NET,可将顶级语句改为传统类、Main 方法写法。

总结

通过 FreeSpire.Presentation 库,我们可以用极简的 .NET10 代码快速实现 PPT 文本、图片的批量提取功能,彻底规避了原生 OpenXML 解析的复杂逻辑。

整套代码轻量化、无冗余、不依赖第三方软件,可直接应用于 文档批量解析、内容归档、素材提取、自动化办公 等业务场景,是 .NET 平台处理 PPT 基础解析需求的高效方案。

相关推荐
2501_930707787 小时前
使用C#代码使用条件格式为 Excel 隔行设置颜色
c#·excel
何以解忧唯有撸码11 小时前
【开源】c#造个轮子-日程安排工具
c#·自定义控件
周杰伦fans11 小时前
CAD菜单栏和工具栏都不见了,怎么显示?
其他·c#
曹牧11 小时前
C#:HashSet<T> 去重
c#
czhc114007566311 小时前
起点、口径与因果:今天用错的七把尺子
c#
c#上位机1 天前
C#上位机项目实战——Task.Run执行带参数的方法
c#·上位机
Lost of 程序猿1 天前
用 YARP 为 .NET 微服务搭一座“立交桥“:路由转发与生产配置实践
c#·asp.net
点纭1 天前
C 语言 第七章 常用函数(3)
c语言·开发语言·算法·oracle·c#
用户788477316341 天前
用 .NET MAUI 一套 C# 同时出 Windows 和 Android:哪些是真能共享,哪些是 marketing
c#