Извлечение отдельных изображений из документов PDF, хранящихся в облаке, является частой задачей для современных приложений на C#, которым необходимо повторно использовать или анализировать визуальные ресурсы. Aspose.PDF for .NET предоставляет мощный облачный API, упрощающий эту задачу. Вы узнаете, как извлекать изображения из PDF‑файлов с помощью C# и Aspose.PDF Cloud SDK. К концу этого руководства у вас будет полностью готовое к производству решение с кодом SDK и эквивалентными вызовами cURL.

Требования к извлечению изображений из PDF в C#

Разработчикам, создающим облачно‑нативные конвейеры обработки документов, часто необходимо извлекать графику из PDF‑файлов, находящихся в удалённом хранилище. Типичные требования включают:

  • Доступ к PDF, хранящемуся в облачном хранилище Aspose.
  • Возможность перечислять каждый объект изображения, встроенный в документ.
  • Скачивание каждого изображения в его оригинальном формате без потери качества.
  • Минимальный объём памяти для обработки больших PDF на сервере.

Универсальные инструменты файловой системы не могут напрямую обращаться к облачному хранилищу, а ручное извлечение с помощью настольного программного обеспечения не масштабируется для автоматизированных задач. Программный подход с использованием облачно‑готовой библиотеки необходим.

Как Aspose.PDF Cloud SDK for .NET подходит для извлечения изображений из PDF

Aspose.PDF Cloud SDK for .NET предлагает REST‑ориентированный API, который работает с PDF‑файлами, хранящимися в Aspose Cloud. Он предоставляет методы, такие как GetDocumentImages для перечисления изображений и GetImage для их загрузки, всё через HTTPS. SDK управляет аутентификацией, управлением хранилищем и потоковой передачей бинарных данных, позволяя вам сосредоточиться на бизнес‑логике.

SDK также поддерживает работу с большими файлами через загрузку кусками и эффективное использование памяти, что соответствует требованиям к производительности серверных приложений. Подробное использование API можно найти в официальной документации и справочнике API.

Создание решения: извлечение изображений из PDF на C#

Установите Aspose.PDF Cloud SDK for .NET

Сначала добавьте пакет SDK в ваш проект.

dotnet add package Aspose.PDF-Cloud

Вы также можете загрузить бинарные файлы со страницы загрузки.

Настройте Aspose Cloud Credentials

Создайте объект конфигурации с вашим идентификатором клиента и секретом.

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));
    }
}

Примечание: Этот пример кода демонстрирует основную функциональность. Прежде чем использовать его в вашем проекте, убедитесь, что вы обновили все пути к файлам и значения конфигурации, чтобы они соответствовали вашей реальной среде, проверьте, что все необходимые зависимости правильно установлены, и тщательно протестируйте в вашей среде разработки. Если вы столкнётесь с какими‑либо проблемами, обратитесь к официальной документации или свяжитесь с командой поддержки для получения помощи.

Выполнение извлечения изображений из PDF с помощью cURL и REST API

Ниже приведены эквивалентные команды 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 содержит массив идентификаторов изображений и форматов.

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 фактическим идентификатором изображения из предыдущего шага. Повторите команду для всех идентификаторов.

Для получения более подробной информации см. официальную документацию API.

Параметры конфигурации для извлечения изображений из PDF

Настройка папки хранилища

Вы можете изменить папку хранилища по умолчанию, изменив путь в вызовах UploadFile и DeleteFile. Например, используйте "Documents" вместо "Temp".

Выбор целевого формата изображения

SDK возвращает оригинальный формат, но вы можете конвертировать его, указав другое расширение при сохранении файла. Отрегулируйте переменную format в цикле загрузки, если вам нужен единый вывод, например png.

Управление тайм-аутом запроса

Клиент PdfApi позволяет установить пользовательский тайм-аут:

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

Увеличение тайм‑аута помогает при обработке очень больших PDF‑файлов.

Заключение

Извлечение изображений из PDF‑файлов, хранящихся в облаке, становится простым с помощью Aspose.PDF for .NET. SDK обрабатывает аутентификацию, хранилище и получение изображений, позволяя вам сосредоточиться на логике вашего приложения. Не забудьте получить соответствующую лицензию для использования в продакшене; детали ценообразования доступны на странице продукта, а временную лицензию можно получить на странице временной лицензии. С предоставленными примерами кода и cURL вы готовы интегрировать извлечение изображений из PDF в любой облачный сервис .NET.

FAQs

Как извлечь изображения из PDF с помощью Aspose.PDF Cloud SDK for .NET?
Используйте метод PdfApi.GetDocumentImages для получения списка изображений и PdfApi.GetImage для загрузки каждого из них. Полный процесс показан в приведённом выше примере кода.

Могу ли я извлечь изображения из PDF без написания кода?
Да, ту же операцию можно выполнить с помощью REST API, используя команды cURL, как показано в разделе «Выполнение извлечения изображений из PDF с помощью cURL и REST API».

Какие форматы изображений можно извлечь из PDF?
API возвращает исходный формат каждого встроенного изображения, например PNG, JPEG, BMP, или TIFF. Вы можете проверить свойство ImageInfo.ImageFormat, чтобы определить формат.

Нужна ли лицензия для запуска в продакшн?
Для развертывания в продакшн требуется коммерческая лицензия. Вы можете посмотреть цены на странице продукта и получить временную лицензию на странице временной лицензии.

Read More