C# 从 PDF 提取图片教程

在实际开发中,PDF 文件中常包含文本、表格和图片。图片可能是合同中的签名、发票上的印章,或者报告、宣传资料中的图表。

本文将介绍如何使用 Spire.PDF for .NET 提取 PDF 中的图片,并保存为独立图像文件,重点演示 PdfImageHelper 的用法。


1. 为什么需要提取 PDF 图片?

  • 保存原始图像:方便后续处理或归档;
  • 数据分析:图表或图片信息可以进一步处理或识别;
  • 文档拆分:将 PDF 中的图片单独存储或用于报告生成。

2. 准备工作

  1. 安装 Spire.PDF for .NET(支持 .NET Framework 和 .NET Core):
powershell 复制代码
Install-Package Spire.PDF
  1. 引用命名空间:
C# 复制代码
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;
using System.IO;

3. 提取 PDF 图片信息

PdfImageHelper 是 Spire.PDF 中用于处理 PDF 图片的核心类,它可以:

  • 获取页面上所有嵌入的图片对象;
  • 提供图片的位置信息、大小、格式等;
  • 将图片提取为 System.Drawing.Image 对象。

示例代码如下:

C# 复制代码
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System;
using System.Drawing;
using System.IO;

class ExtractPdfImages
{
    static void Main()
    {
        // 加载 PDF 文件
        PdfDocument pdf = new PdfDocument();
        pdf.LoadFromFile("Sample.pdf");

        int imageIndex = 1;

        // 遍历每一页
        foreach (PdfPageBase page in pdf.Pages)
        {
            // 使用 PdfImageHelper 获取页面上的所有图片信息
            PdfImageInfo[] images = PdfImageHelper.GetImages(page);

            foreach (PdfImageInfo info in images)
            {
                // 提取图片对象
                Image img = info.Image;

                // 保存为独立文件
                string fileName = $"Image_{imageIndex}.png";
                img.Save(fileName, System.Drawing.Imaging.ImageFormat.Png);

                Console.WriteLine($"已提取图片: {fileName}");
                imageIndex++;
            }
        }

        Console.WriteLine("PDF 图片提取完成!");
    }
}

4. 高级用法(可选)

  • 获取图片位置和大小 :通过 PdfImageInfo.Rect 可以获取图片在页面中的矩形区域;
  • 按页面或区域过滤:只提取指定页或特定区域的图片;
  • 支持多种格式:可保存为 PNG、JPEG、BMP 等。

例如,只提取第一页的所有图片:

C# 复制代码
PdfPageBase firstPage = pdf.Pages[0];
PdfImageInfo[] firstPageImages = PdfImageHelper.GetImages(firstPage);

5. 总结

本文介绍了在 C# 中使用 Spire.PDF for .NET 提取 PDF 图片的完整流程:

  1. 加载 PDF 文件
  2. 使用 PdfImageHelper 获取图片信息
  3. 将图片保存为独立文件
  4. 可选:获取位置、大小或按区域提取

通过这种方式,开发者可以快速提取 PDF 中的所有图片,应用于报表处理、合同归档或数据分析场景。

相关推荐
卷无止境5 分钟前
FastAPI 权限管理实战:从 ACL 到 RBAC 的那些门道
后端·python·fastapi
淡海水1 小时前
01-05-运行时-JIT优化全景-内联去虚拟化边界检查消除
windows·c#·虚拟化·jit·内联·边界检查消除
GreenTea8 小时前
深度解读 Anthropic 多智能体报告:更强的模型 ≠ 更好的协调
前端·后端·算法
风流 少年8 小时前
Spring AI 2.0:Memory
java·后端·spring
万少9 小时前
给 DeepSeek Harness 装个"应用商店":一条命令,595 个插件随你逛
前端·javascript·后端
波波0079 小时前
C# 15 重磅新特性: 带标签 break 与 continue:重新定义嵌套循环控制流
服务器·前端·c#
wujian831113 小时前
怎么用千问生成word文档:从「格式崩」到「一键过」,AI导出鸭打通最后半厘米
人工智能·ai·c#·word·豆包·deepseek·ai导出鸭
IT_陈寒13 小时前
Python的GIL让我多写了500行代码
前端·人工智能·后端
zlinear数据采集卡14 小时前
D223上位机C#开发实战:从帧解析到波形显示的完整实现
开发语言·arm开发·嵌入式硬件·fpga开发·开源·c#
IT爱学堂14 小时前
精讲软件设计师(软考中级)一站式通关课_实战课程_慕课网
后端