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

相关推荐
codedx3 分钟前
LangChain 和 LangGraph 构建的 Agent 项目模版
后端·langchain·agent
葫芦和十三1 小时前
图解 MongoDB 08|ESR 原则:复合索引的字段顺序怎么定
后端·mongodb·agent
葫芦和十三8 小时前
图解 MongoDB 07|索引类型:七种索引,七种访问形状
后端·mongodb·agent
朦胧之10 小时前
AI 编程-老项目改造篇
java·前端·后端
爱勇宝13 小时前
我做了一个只用来搜歌词的小 App
android·前端·后端
IT_陈寒13 小时前
SpringBoot自动配置坑了我一晚上,原来问题出在这
前端·人工智能·后端
SelectDB14 小时前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
SelectDB14 小时前
秒级弹性、最高降本 70%:SelectDB Serverless 如何重塑云数仓资源效率
大数据·后端·云原生
PinkSun14 小时前
Spring AI ChatMemory踩坑实录:重启丢数据、Agent丢记忆、对话溢出
后端·ai编程
壹方秘境14 小时前
我用Go语言开发了一个跨平台的HTTPS抓包和调试工具
前端·后端·ios