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

相关推荐
Mos_x3 分钟前
HeidiSQL导入与导出数据
java·后端
oak隔壁找我16 分钟前
Elasticsearch QueryBuilders 高级使用案例
java·后端
Zhang青山20 分钟前
【玩转全栈】----Django基本配置和介绍
java·后端
切糕师学AI1 小时前
C# 使用 CSRedisCore指南
redis·c#·.net core
勇敢牛牛_1 小时前
Rust真的适合写业务后端吗?
开发语言·后端·rust
不爱学英文的码字机器2 小时前
深度解析《AI+Java编程入门》:一本为零基础重构的Java学习路径
java·人工智能·后端·重构
IT_陈寒2 小时前
Vue3性能翻倍秘籍:5个Composition API技巧让你的应用快如闪电⚡
前端·人工智能·后端
Zhang青山2 小时前
使用 Nginx 轻松处理跨域请求(CORS)
java·后端
.生产的驴2 小时前
React 路由权限跳转 Token判断 路由控制 登录状态控制
前端·javascript·react.js·ajax·前端框架·c#·ecmascript
Victor3563 小时前
Redis(99)Redis的高可用性如何实现?
后端