Информация об изображении в PDF-файле

Введение

Файлы PDF в наши дни повсюду — практически каждый профессиональный и личный документ в какой-то момент попадает в этот формат. Будь то отчет, брошюра или электронная книга, понимание того, как взаимодействовать с этими файлами программным способом, открывает множество возможностей. Одним из распространенных требований является извлечение информации об изображениях из файлов PDF. В этом руководстве мы рассмотрим, как использовать библиотеку Aspose.PDF для .NET для извлечения важных сведений об изображениях, встроенных в документ PDF.

Предпосылки

Прежде чем мы перейдем к тонкостям кодирования, вам необходимо выполнить несколько предварительных условий:

  1. Среда разработки: Вам понадобится настроенная среда разработки .NET. Это может быть Visual Studio или любая другая совместимая с .NET IDE.
  2. Библиотека Aspose.PDF: Убедитесь, что у вас есть доступ к библиотеке Aspose.PDF. Вы можете загрузить ее сСайт Aspose.
  3. Базовые знания C#: знакомство с C# и концепциями объектно-ориентированного программирования поможет вам без труда освоить материал этого руководства.
  4. PDF-документ: держите под рукой образец PDF-документа, содержащий изображения, для проверки вашего кода.

Импорт пакетов

Чтобы начать использовать библиотеку Aspose.PDF, вам нужно импортировать необходимые пространства имен в ваш файл C#. Вот краткое изложение:

using System.IO;
using Aspose.Pdf;
using System;

Эти пространства имен предоставят вам доступ к необходимым классам и методам для работы с PDF-файлами и извлечения данных изображений.

Теперь, когда вы все настроили, пришло время разбить это на управляемые шаги. Мы напишем программу C#, которая загружает PDF-документ, проходит по каждой странице и извлекает размеры и разрешение каждого изображения в документе.

Шаг 1: Инициализация документа

На этом шаге мы инициализируем PDF-документ, используя путь к вашему PDF-файлу. Вам следует заменить"YOUR DOCUMENT DIRECTORY" с фактическим путем расположения вашего PDF-файла.

// Путь к каталогу документов.
string dataDir = "YOUR DOCUMENT DIRECTORY";
// Загрузите исходный PDF-файл
Document doc = new Document(dataDir + "ImageInformation.pdf");

Мы создаемDocument объект, который загружает PDF из указанного каталога. Это позволит нам работать с содержимым файла.

Шаг 2: Установка разрешения по умолчанию и инициализация структур данных

Далее мы устанавливаем разрешение по умолчанию для изображений, что полезно для вычислений. Мы также подготовим массив для хранения имен изображений и стек для управления графическими состояниями.

// Определите разрешение изображения по умолчанию
int defaultResolution = 72;
System.Collections.Stack graphicsState = new System.Collections.Stack();
// Определить объект списка массивов, который будет содержать имена изображений.
System.Collections.ArrayList imageNames = new System.Collections.ArrayList(doc.Pages[1].Resources.Images.Names);

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

Шаг 3: Обработка каждого оператора на странице

Теперь мы пройдемся по всем операторам на первой странице документа. Здесь и происходит самая тяжелая работа.

foreach (Operator op in doc.Pages[1].Contents)
{
    // Операторы процесса...
}

Каждый оператор в PDF-файле представляет собой команду, которая сообщает рендереру, как управлять графическими элементами, включая изображения.

Шаг 4: Обработка операторов GSave/GRestore

Внутри цикла мы будем обрабатывать команды сохранения и восстановления графики, чтобы отслеживать изменения, внесенные в графическое состояние.

if (opSaveState != null) 
{
    // Сохранить предыдущее состояние
    graphicsState.Push(((Matrix)graphicsState.Peek()).Clone());
} 
else if (opRestoreState != null) 
{
    // Восстановить предыдущее состояние
    graphicsState.Pop();
}

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

Шаг 5: Управление матрицами трансформации

Далее мы занимаемся объединением матриц преобразования при применении преобразований к изображениям.

else if (opCtm != null) 
{
    Matrix cm = new Matrix(
        (float)opCtm.Matrix.A,
        (float)opCtm.Matrix.B,
        (float)opCtm.Matrix.C,
        (float)opCtm.Matrix.D,
        (float)opCtm.Matrix.E,
        (float)opCtm.Matrix.F);
    
    ((Matrix)graphicsState.Peek()).Multiply(cm);
    continue;
}

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

Шаг 6: Извлечение информации об изображении

Наконец, мы обрабатываем данные оператора чертежа для изображений и извлекаем необходимую информацию, такую как размеры и разрешение.

else if (opDo != null) 
{
    // Оператор Handle Do, который рисует объекты
    if (imageNames.Contains(opDo.Name)) 
    {
        Matrix lastCTM = (Matrix)graphicsState.Peek();
        XImage image = doc.Pages[1].Resources.Images[opDo.Name];
        double scaledWidth = Math.Sqrt(Math.Pow(lastCTM.Elements[0], 2) + Math.Pow(lastCTM.Elements[1], 2));
        double scaledHeight = Math.Sqrt(Math.Pow(lastCTM.Elements[2], 2) + Math.Pow(lastCTM.Elements[3], 2));
        double originalWidth = image.Width;
        double originalHeight = image.Height;
        
        double resHorizontal = originalWidth * defaultResolution / scaledWidth;
        double resVertical = originalHeight * defaultResolution / scaledHeight;
        
        // Вывод информации
        Console.Out.WriteLine(string.Format(dataDir + "image {0} ({1:.##}:{2:.##}): res {3:.##} x {4:.##}",
                         opDo.Name, scaledWidth, scaledHeight, resHorizontal, resVertical));
    }
}

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

Заключение

Поздравляем! Вы только что создали рабочий пример того, как извлечь информацию об изображении из файла PDF с помощью Aspose.PDF для .NET. Эта возможность может быть невероятно полезна разработчикам, которым нужно анализировать или обрабатывать документы PDF для различных приложений, таких как отчетность, извлечение данных или даже пользовательские просмотрщики PDF.

Часто задаваемые вопросы

Что такое библиотека Aspose.PDF?

Библиотека Aspose.PDF — мощный инструмент для создания, обработки и преобразования PDF-файлов в приложениях .NET.

Могу ли я пользоваться библиотекой бесплатно?

Да, Aspose предлагает бесплатную пробную версию. Вы можете загрузить еездесь.

Какие типы форматов изображений можно извлечь?

Библиотека поддерживает различные форматы изображений, включая JPEG, PNG и TIFF, если они встроены в PDF-файл.

Используется ли Aspose в коммерческих целях?

Да, вы можете использовать продукты Aspose в коммерческих целях. Для получения лицензии посетитестраница покупки.

Как получить поддержку по Aspose?

Вы можете получить доступ к форуму поддержкиздесь.