.NET 开发中如何通过 C# 提取 PDF 中的图片

 更新时间:2026年02月03日 08:44:33   作者:LAYONTHEGROUND  
本文介绍了如何使用FreeSpire.PDFfor.NET免费库从PDF文档中提取图片,提供了两种典型场景的代码示例,并强调了该方案的优势,包括灵活可控、高效批量处理和轻量无依赖,感兴趣的朋友跟随小编一起看看吧

在.NET 开发中,从 PDF 里提取图片是个高频需求 —— 不管是数据迁移时需要剥离文档中的图表,还是内容分析时要提取关键插图,都绕不开这个场景。但传统方案总有些麻烦:付费 PDF 库成本高,还可能依赖 Adobe Acrobat 这类重型工具,对中小型项目不够友好。
本文将介绍如何使用免费库 Free Spire.PDF for .NET 精准实现“整文档批量提取”或“指定页面精准提取”,代码简单、操作高效。

一、前期准备:快速引入工具库

使用 Free Spire.PDF 前,需先完成库引用,推荐通过 NuGet 安装(步骤极简,3步即可完成):

  • 打开Visual Studio,右键项目选择“管理NuGet程序包”;
  • 在“浏览”栏搜索“Free Spire.PDF”,找到官方包后点击“安装”;
  • 等待安装完成,项目会自动添加引用,无需手动配置路径。

⚠️ 注意:免费版对单文档页数有一定限制。

二、核心逻辑与场景实现

Free Spire.PDF 提取图片的核心逻辑很清晰:通过 PdfImageHelper 类的 GetImagesInfo() 方法获取页面图片信息,再调用 PdfImageInfo.Image.Save() 保存图片。以下针对两种典型场景,提供可直接复用的代码。

场景1:提取 PDF 文档中所有图片

适用于需要批量获取文档中所有图片的场景(例如归档文档内所有插图等)。实现逻辑为“加载文档→遍历所有页面→提取并按序保存图片”。

using Spire.Pdf;
using Spire.Pdf.Utilities;
using System.Drawing;
namespace ExtractAllImages
{
    class Program
    {
        static void Main(string[] args)
        {
            // 1. 加载目标PDF文档
            PdfDocument pdf = new PdfDocument();
            pdf.LoadFromFile("Input.pdf"); // 替换为你的PDF路径
            // 2. 初始化图片处理工具
            PdfImageHelper imageHelper = new PdfImageHelper();
            // 3. 遍历所有页面,提取图片
            int imageCount = 0; // 用于给图片命名,避免重复
            for (int pageIndex = 0; pageIndex < pdf.Pages.Count; pageIndex++)
            {
                // 获取当前页对象
                PdfPageBase currentPage = pdf.Pages[pageIndex];
                // 获取当前页所有图片信息
                PdfImageInfo[] imageInfos = imageHelper.GetImagesInfo(currentPage);
                // 保存当前页的图片
                foreach (var imageInfo in imageInfos)
                {
                    Image image = imageInfo.Image;
                    // 保存路径可自定义
                    image.Save($"Output\\image_{imageCount}.png"); 
                    imageCount++;
                }
            }
            // 4. 释放资源
            pdf.Dispose();
        }
    }
}

场景2:提取 PDF 指定页面的图片

适用于仅需某几页图片的场景(例如从多页报告中提取封面图、从论文中提取某页的图表等)。核心是“定位目标页面→单独提取该页图片”。

⚠️ 关键提醒:Free Spire.PDF 的页面索引从0开始(第1页对应索引0,第2页对应索引1,以此类推)。

using Spire.Pdf;
using Spire.Pdf.Utilities;
using System.Drawing;
namespace ExtractImagesFromSpecificPage
{
    class Program
    {
        static void Main(string[] args)
        {
            // 1. 加载目标PDF文档
            PdfDocument pdf = new PdfDocument();
            pdf.LoadFromFile("Input.pdf"); // 替换为你的PDF路径
            // 2. 定位指定页面(此处以第1页为例,索引为0)
            int targetPageIndex = 0; // 如需提取第3页,改为2即可
            PdfPageBase targetPage = pdf.Pages[targetPageIndex];
            // 3. 初始化图片处理工具并获取图片信息
            PdfImageHelper imageHelper = new PdfImageHelper();
            PdfImageInfo[] imageInfos = imageHelper.GetImagesInfo(targetPage);
            // 4. 保存指定页的图片
            for (int i = 0; i < imageInfos.Length; i++)
            {
                Image image = imageInfos[i].Image;
                // 保存路径可自定义
                image.Save($"Output\\page_{targetPageIndex + 1}_image_{i}.png"); 
            }
            // 5. 释放资源
            pdf.Dispose();
        }
    }
}

三、方案优势与注意事项

  • 灵活可控:支持自定义图片保存路径(如Output\\)和格式(如 PNGJPG 等);
  • 高效批量处理:通过循环逻辑可快速处理多页 PDF,无需手动逐页操作;
  • 轻量无依赖:无需安装 Adobe Acrobat 等第三方软件,仅需引用一个类库即可运行。

总结

用 Free Spire.PDF for .NET 提取PDF图片,无需编写复杂解析算法,也不用依赖重型工具,几行代码即可实现精准提取。无论是整文档批量处理,还是指定页面定向提取,都能轻松应对。

到此这篇关于 .NET 开发中如何通过 C# 提取 PDF 中的图片的文章就介绍到这了,更多相关C# 提取 PDF图片内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C#基于TCP/IP实现接收并推送数据的小工具

    C#基于TCP/IP实现接收并推送数据的小工具

    这篇文章主要为大家详细介绍了C#如何基于TCP/IP实现接收并推送数据的小工具,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下
    2025-11-11
  • C#实现字符串模糊匹配的方法小结

    C#实现字符串模糊匹配的方法小结

    在C#中实现字符串的模糊匹配可以借助正则表达式或者一些模糊匹配算法来实现,文章通过代码示例讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-07-07
  • C# 运算符 ?、??、?: 各种问号的用法和说明

    C# 运算符 ?、??、?: 各种问号的用法和说明

    本文介绍C#中三种常见的问号运算符的使用方法,简单讲解给大家,希望对大家有所帮助。
    2016-04-04
  • C#中sizeof的用法实例分析

    C#中sizeof的用法实例分析

    这篇文章主要介绍了C#中sizeof的用法,包括了常见的用法及注释事项,需要的朋友可以参考下
    2014-09-09
  • C# Socket编程实现简单的局域网聊天器的示例代码

    C# Socket编程实现简单的局域网聊天器的示例代码

    这篇文章主要介绍了C# Socket编程实现简单的局域网聊天器,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • C#用RabbitMQ实现消息订阅与发布

    C#用RabbitMQ实现消息订阅与发布

    在消息队列模型中,如何将消息广播到所有的消费者,这种模式成为“发布/订阅”。本文主要以一个简单的小例子,简述通过fanout交换机,实现消息的发布与订阅,仅供学习分享使用,如有不足之处,还请指正。
    2021-05-05
  • 采用C#代码动态设置文件权限

    采用C#代码动态设置文件权限

    在开发中,我们经常会使用IO操作,例如创建,删除文件等操作。在项目中这样的需求也较多,我们也会经常对这些操作进行编码,但是对文件的权限进行设置,这样的操作可能会手动操作,本文介绍一种采用代码动态对文件设置权限的操作。
    2016-12-12
  • C#实现汉字转换为拼音缩写的代码

    C#实现汉字转换为拼音缩写的代码

    这篇文章主要为大家详细介绍了C#实现汉字转换为拼音缩写的代码,感兴趣的小伙伴们可以参考一下
    2016-07-07
  • c# Newtonsoft 六个值得使用的特性(下)

    c# Newtonsoft 六个值得使用的特性(下)

    这篇文章主要介绍了c# Newtonsoft 六个值得使用的特性,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-06-06
  • C#使用Linq to XML处理XML详解

    C#使用Linq to XML处理XML详解

    LINQ to XML是.NET Framework 3.5引入的一种XML编程API,本文将深入探讨LINQ to XML的核心概念、常见操作及最佳实践,需要的小伙伴可以了解下
    2025-07-07

最新评论