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

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

Шаг 1. Определите каталог документов.

Обязательно установите правильный каталог документов. Заменять"YOUR DOCUMENT DIRECTORY" в коде укажите путь к каталогу, в котором находится ваш PDF-документ.

string dataDir = "YOUR DOCUMENT DIRECTORY";

Шаг 2. Загрузите исходный PDF-файл.

На этом этапе мы загрузим исходный PDF-файл, используяDocument класс Aspose.PDF. ИспользоватьDocument конструктор и передайте путь к PDF-документу.

Document doc = new Document(dataDir + "ImageInformation.pdf");

Шаг 3. Установите разрешение по умолчанию

На этом этапе мы установим разрешение по умолчанию для изображений. В примере разрешение по умолчанию установлено на 72.

int defaultResolution = 72;

Шаг 4. Инициализация объектов и счетчиков

На этом этапе мы инициализируем объекты и счетчики, необходимые для получения информации об изображении.

System.Collections.Stack graphicsState = new System.Collections.Stack();
System.Collections.ArrayList imageNames = new System.Collections.ArrayList(doc.Pages[1].Resources.Images.Names);

Шаг 5. Циклическое переключение операторов на первой странице документа.

На этом этапе мы рассмотрим операторы на первой странице документа, чтобы определить операции, связанные с изображениями.

foreach(Operator op in doc.Pages[1].Contents)
{

Шаг 6. Управление операторами и извлечение информации об изображении

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

Aspose.Pdf.Operators.GSave opSaveState = op as Aspose.Pdf.Operators.GSave;
Aspose.Pdf.Operators.GRestore opRestoreState = op as Aspose.Pdf.Operators.GRestore;
Aspose.Pdf.Operators.ConcatenateMatrix opCtm = op as Aspose.Pdf.Operators.ConcatenateMatrix;
Aspose.Pdf.Operators.Do opDo = op as Aspose.Pdf.Operators.Do;

//Обработка операций GSave и GRestore для преобразований.
if (opSaveState != null)
{
     graphicsState.Push(((System.Drawing.Drawing2D.Matrix)graphicsState.Peek()).Clone());
}
else if (opRestoreState != null)
{
     graphicsState. Pop();
}
// Обработка операции ConcatenateMatrix для преобразований
else if (opCtm != null)
{
     // Примените матрицу преобразования
     System.Drawing.Drawing2D.Matrix cm = new System.Drawing.Drawing2D.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);


     ((System.Drawing.Drawing2D.Matrix)graphicsState.Peek()).Multiply(cm);
     keep on going;
}
// Обработка операции Do для изображений
else if (opDo != null)
{
     if (imageNames.Contains(opDo.Name))
     {
         // Получить изображение
         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 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));
     }
}

Пример исходного кода для информации об изображении с использованием Aspose.PDF для .NET

// Путь к каталогу документов.
string dataDir = "YOUR DOCUMENT DIRECTORY";
// Загрузите исходный PDF-файл
Document doc = new Document(dataDir+ "ImageInformation.pdf");
// Определите разрешение по умолчанию для изображения
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);
// Вставьте объект в стопку
graphicsState.Push(new System.Drawing.Drawing2D.Matrix(1, 0, 0, 1, 0, 0));
// Получить все операторы на первой странице документа
foreach (Operator op in doc.Pages[1].Contents)
{
	// Используйте операторы GSave/GResstore, чтобы вернуть преобразования к ранее установленным значениям.
	Aspose.Pdf.Operators.GSave opSaveState = op as Aspose.Pdf.Operators.GSave;
	Aspose.Pdf.Operators.GRestore opRestoreState = op as Aspose.Pdf.Operators.GRestore;
	// Создайте экземпляр объекта ConcatenateMatrix, поскольку он определяет текущую матрицу преобразования.
	Aspose.Pdf.Operators.ConcatenateMatrix opCtm = op as Aspose.Pdf.Operators.ConcatenateMatrix;
	// Создайте оператор Do, который извлекает объекты из ресурсов. Он рисует объекты формы и объекты изображения.
	Aspose.Pdf.Operators.Do opDo = op as Aspose.Pdf.Operators.Do;
	if (opSaveState != null)
	{
		//Сохраните предыдущее состояние и поместите текущее состояние в начало стека.
		graphicsState.Push(((System.Drawing.Drawing2D.Matrix)graphicsState.Peek()).Clone());
	}
	else if (opRestoreState != null)
	{
		// Выбросить текущее состояние и восстановить предыдущее
		graphicsState.Pop();
	}
	else if (opCtm != null)
	{
		System.Drawing.Drawing2D.Matrix cm = new System.Drawing.Drawing2D.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);
		// Умножьте текущую матрицу на матрицу состояний.
		((System.Drawing.Drawing2D.Matrix)graphicsState.Peek()).Multiply(cm);
		continue;
	}
	else if (opDo != null)
	{
		// В случае, если это оператор рисования изображения
		if (imageNames.Contains(opDo.Name))
		{
			System.Drawing.Drawing2D.Matrix lastCTM = (System.Drawing.Drawing2D.Matrix)graphicsState.Peek();
			// Создайте объект XImage для хранения изображений первой страницы PDF.
			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));
		}
	}
}

Заключение

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

Часто задаваемые вопросы по информации об изображениях в PDF-файле

Вопрос: Какова цель извлечения информации об изображении из PDF-документа с помощью Aspose.PDF для .NET?

О: Извлечение информации об изображении из PDF-документа дает представление о размерах, разрешении и других атрибутах изображений в документе. Эту информацию можно использовать для задач обработки, анализа или оптимизации изображений.

Вопрос: Как Aspose.PDF for .NET помогает извлекать информацию об изображении из PDF-документа?

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

Вопрос: Какую информацию об изображении можно извлечь с помощью этого метода?

О: Этот метод позволяет извлекать и отображать такую информацию, как масштабированные размеры, разрешение и названия изображений в PDF-документе.

Вопрос: Как код идентифицирует и обрабатывает операторы, связанные с изображениями, в PDF-документе?

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

Вопрос: Каково значение разрешения по умолчанию и как оно используется в коде?

О: Разрешение по умолчанию используется в качестве ориентира для расчета фактического разрешения изображений. Код вычисляет разрешение каждого изображения на основе его размеров и настроек разрешения по умолчанию.

Вопрос: Как можно использовать извлеченную информацию об изображении в реальных сценариях?

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

Вопрос: Могу ли я изменить код для извлечения дополнительных атрибутов, связанных с изображением?

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

Вопрос: Является ли процесс извлечения информации об изображении ресурсоемким или трудоемким?

Ответ: Процесс извлечения информации об изображении эффективен и оптимизирован по производительности, обеспечивая минимальное влияние на использование ресурсов и время обработки.

Вопрос: Какую пользу разработчики могут получить от идентификации и извлечения информации об изображениях из PDF-документов?

Ответ: Разработчики могут получить представление о характеристиках изображений в документах PDF, что позволит им принимать обоснованные решения относительно манипулирования, обработки и оптимизации изображений.

Вопрос: Можно ли использовать этот метод для пакетной обработки PDF-документов, содержащих изображения?

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