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 中的所有图片,应用于报表处理、合同归档或数据分析场景。

相关推荐
小满zs2 小时前
Go语言第三章(五谷轮回)
后端·go
霸道流氓气质6 小时前
SpringBoot中通用工具类库(Utils)封装与使用实践
spring boot·后端·python
MemoleCard9 小时前
深度解析Java当中的锁机制
后端
wear工程师9 小时前
ThreadLocal 在线程池里为什么会串数据:别只会答内存泄漏
java·后端
whyfail10 小时前
前端学 Spring Boot(2):一次点击,如何穿过整个后端?
前端·spring boot·后端
Xin_ye1008611 小时前
第三章:内存泄漏的常见“案发现场”
c#·wpf
程序员cxuan12 小时前
Loop 还没玩明白,Graph Engineering 又火了。
人工智能·后端·程序员
uzong12 小时前
把一面面试总结做成一个 Skill:重复的事,就别每次都重写
后端·面试
程序员海军13 小时前
一个 AI 应用开发程序员的一天,都在屏幕前忙些什么?
前端·后端·程序员