从云端存储的 PDF 文档中提取单个图像是现代 C# 应用程序经常需要的功能,这些应用程序需要重新使用或分析视觉资产。Aspose.PDF for .NET 提供了强大的基于云的 API,简化了此任务。您将学习如何使用 C# 和 Aspose.PDF Cloud SDK 从 PDF 文件中提取图像。完成本指南后,您将拥有一个完整的、可投入生产的解决方案,其中包括 SDK 代码和等效的 cURL 调用。

C# 中 PDF 图像提取的要求

构建云原生文档处理流水线的开发人员通常需要从位于远程存储的 PDF 中提取图形。典型的需求包括:

  • 访问存储在 Aspose Cloud 存储中的 PDF。
  • 能够枚举文档中嵌入的每个图像对象。
  • 下载每个图像的原始格式,且不损失质量。
  • 最小的内存占用,以在服务器上处理大型 PDF。

通用文件系统工具无法直接访问云存储,使用桌面软件进行手动提取也无法满足自动化工作负载的规模需求。采用云就绪库的编程方式是必不可少的。

Aspose.PDF Cloud SDK for .NET 如何适用于 PDF 图像提取

Aspose.PDF Cloud SDK for .NET 提供基于 REST 的 API,可用于处理存储在 Aspose Cloud 中的 PDF。它提供诸如 GetDocumentImages 用于列出图像以及 GetImage 用于下载图像的方法,全部通过 HTTPS。SDK 负责身份验证、存储管理和二进制数据流,让您专注于业务逻辑。

该 SDK 还通过分块上传和高效的内存使用来支持大文件,这符合服务器端应用程序的性能需求。详细的 API 用法可在官方文档和API 参考中找到。

构建解决方案:在 C# 中提取 PDF 图像

安装 Aspose.PDF Cloud SDK for .NET

首先,将 SDK 包添加到您的项目中。

dotnet add package Aspose.PDF-Cloud

您也可以从下载页面下载二进制文件。

配置 Aspose Cloud 凭据

使用您的客户端 ID 和密钥创建配置对象。

var config = new Configuration
{
    ClientId = "YOUR_CLIENT_ID",
    ClientSecret = "YOUR_CLIENT_SECRET"
};
var pdfApi = new PdfApi(config);

Configuration 类的文档位于 API 参考。

将 PDF 上传到云存储

如果 PDF 尚未存储在 Aspose Cloud 中,请上传它。

using (var fileStream = File.OpenRead(pdfFileName))
{
    byte[] fileBytes = new byte[fileStream.Length];
    fileStream.Read(fileBytes, 0, fileBytes.Length);
    pdfApi.UploadFile(Path.Combine("Temp", pdfFileName), fileBytes);
}

UploadFile 方法将文件存储在 Temp 文件夹下。

检索嵌入图像的列表

调用 API 获取每个图像的信息。

ImagesResponse imagesResponse = pdfApi.GetDocumentImages(pdfFileName);

ImagesResponse 包含一个 ImageInfo 对象的集合,每个对象都有 Id 和 ImageFormat。

下载每张图片并本地保存

遍历图像列表,下载并写入磁盘。

foreach (ImageInfo imageInfo in imagesResponse.Images.List)
{
    int imageId = imageInfo.Id ?? 0;
    string format = imageInfo.ImageFormat?.ToLower() ?? "png";
    string outputFileName = $"extracted_image_{imageId}.{format}";
    byte[] imageBytes = pdfApi.GetImage(pdfFileName, imageId);
    File.WriteAllBytes(outputFileName, imageBytes);
}

此循环保留原始图像格式,并创建名为 extracted_image_<id>.<ext> 的文件。

使用云存储从 PDF 提取图像的完整工作示例

以下代码演示了从身份验证到清理的完整工作流。

using System;
using System.IO;
using Aspose.Pdf.Cloud.Sdk.Api;
using Aspose.Pdf.Cloud.Sdk.Client;
using Aspose.Pdf.Cloud.Sdk.Model;

class ExtractImagesFromPdf
{
    static void Main()
    {
        // Replace with your actual Aspose Cloud credentials
        string clientId = "YOUR_CLIENT_ID";
        string clientSecret = "YOUR_CLIENT_SECRET";

// Initialize Aspose.PDF Cloud configuration
        var config = new Configuration
        {
            ClientId = clientId,
            ClientSecret = clientSecret
        };
        var pdfApi = new PdfApi(config);

// PDF file name (must be present in Aspose Cloud storage)
        string pdfFileName = "input.pdf";

// Optional: upload the PDF to cloud storage if it does not exist there
        if (!File.Exists(pdfFileName))
        {
            Console.WriteLine($"Local file '{pdfFileName}' not found.");
            return;
        }
        using (var fileStream = File.OpenRead(pdfFileName))
        {
            byte[] fileBytes = new byte[fileStream.Length];
            fileStream.Read(fileBytes, 0, fileBytes.Length);
            pdfApi.UploadFile(Path.Combine("Temp", pdfFileName), fileBytes);
        }

// Retrieve list of images embedded in the PDF
        ImagesResponse imagesResponse = pdfApi.GetDocumentImages(pdfFileName);
        if (imagesResponse?.Images?.List == null || imagesResponse.Images.List.Count == 0)
        {
            Console.WriteLine("No images found in the PDF.");
            return;
        }

// Extract each image and save locally
        foreach (ImageInfo imageInfo in imagesResponse.Images.List)
        {
            int imageId = imageInfo.Id ?? 0;
            string format = imageInfo.ImageFormat?.ToLower() ?? "png";
            string outputFileName = $"extracted_image_{imageId}.{format}";

// Download image bytes from the cloud
            byte[] imageBytes = pdfApi.GetImage(pdfFileName, imageId);
            if (imageBytes == null || imageBytes.Length == 0)
            {
                Console.WriteLine($"Failed to download image ID {imageId}.");
                continue;
            }

// Write image to local file system
            File.WriteAllBytes(outputFileName, imageBytes);
            Console.WriteLine($"Image ID {imageId} saved as '{outputFileName}'.");
        }

// Optional: clean up uploaded PDF from cloud storage
        pdfApi.DeleteFile(Path.Combine("Temp", pdfFileName));
    }
}

注意: 此代码示例演示了核心功能。在将其用于项目之前,请确保更新所有文件路径和配置值以匹配实际环境,验证已正确安装所有必需的依赖项,并在开发环境中彻底测试。如果遇到任何问题,请参阅官方文档或联系支持团队获取帮助。

使用 cURL 和 REST API 执行 PDF 图像提取

以下是等效的 cURL 命令,可在不编写 C# 代码的情况下执行相同的操作。

1. 进行身份验证并获取访问令牌

curl -X POST "https://api.aspose.cloud/v3.0/oauth2/token?grant_type=client_credentials" \
     -u "YOUR_CLIENT_ID:YOUR_CLIENT_SECRET"

响应中包含一个在后续调用中使用的 access_token。

2. 上传源 PDF

curl -X PUT "https://api.aspose.cloud/v3.0/pdf/storage/file/Temp/input.pdf" \
     -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
     -T "input.pdf"

3. 列出嵌入的图像

curl -X GET "https://api.aspose.cloud/v3.0/pdf/input.pdf/images" \
     -H "Authorization: Bearer YOUR_ACCESS_TOKEN"

JSON 响应包含图像 ID 和格式的数组。

4. 下载每张图片

curl -X GET "https://api.aspose.cloud/v3.0/pdf/input.pdf/images/1" \
     -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
     -o "extracted_image_1.png"

将 1 替换为上一步中的实际图像 ID。对所有 ID 重复此命令。

欲了解更多详情,请参阅官方 API 文档。

PDF 图像提取的配置选项

设置存储文件夹

您可以通过修改 UploadFile 和 DeleteFile 调用中的路径来更改默认存储文件夹。例如,使用 "Documents" 而不是 "Temp"。

选择目标图像格式

SDK 返回原始格式,但您可以在保存文件时指定不同的扩展名来进行转换。如果需要统一的输出,例如 png,请在下载循环中调整 format 变量。

控制请求超时

PdfApi 客户端允许您设置自定义超时:

pdfApi.Configuration.Timeout = 300000; // 5 minutes

增加超时时间有助于处理非常大的 PDF 文件。

结论

从云端存储的 PDF 文件中提取图像变得简单,只需使用 Aspose.PDF for .NET。SDK 处理身份验证、存储和图像检索,让您专注于应用程序逻辑。请记得为生产环境获取适当的许可证;产品页面上提供了定价详情,您也可以从临时许可证页面获取临时许可证。使用提供的代码和 cURL 示例,您即可将 PDF 图像提取集成到任何 .NET 云服务中。

常见问题

如何使用 Aspose.PDF Cloud SDK for .NET 从 PDF 中提取图像?
使用 PdfApi.GetDocumentImages 方法列出图像,使用 PdfApi.GetImage 下载每个图像。完整的工作流程在上面的代码示例中有所说明。

我可以在不编写任何代码的情况下从 PDF 中提取图像吗?
是的,可以使用 REST API 和 cURL 命令执行相同的操作,如 “通过 cURL 和 REST API 执行 PDF 图像提取” 部分所示。

可以从 PDF 中提取哪些图像格式?
API 返回每个嵌入图像的原始格式,例如 PNG、JPEG、BMP 或 TIFF。您可以检查 ImageInfo.ImageFormat 属性来确定格式。

我需要许可证才能在生产环境中运行吗?
商业许可证是生产部署所必需的。您可以在产品页面查看定价,并从临时许可证页面获取临时许可证。

阅读更多