Операции с контентом

Операции с контентом

Операции с контентом

PDF‑страницы рендерятся последовательностью операторов, хранящихся в потоке содержимого.
Aspose.PDF FOSS for .NET раскрывает эти операторы через OperatorCollection
на каждом Page и предоставляет ContentStreamBuilder для программного создания нового
содержимого.


Чтение операторов контент‑потока

Каждый Page имеет свойство Contents, которое возвращает OperatorCollection. Переберите его, чтобы проверить каждый оператор.

using var doc = Document.Open(pdfBytes);
var page = doc.Pages[1];

foreach (var op in page.Contents)
{
    Console.WriteLine(op.ToString());
}

Создание потоков содержимого

ContentStreamBuilder предоставляет fluent API для построения последовательностей операторов контент‑потока, включая управление графическим состоянием, построение путей, вывод текста и настройку цветов.

var builder = new ContentStreamBuilder();
builder.SaveState();
builder.SetFillColor(1.0, 0.0, 0.0);  // Red fill
builder.SetMatrix(1, 0, 0, 1, 72, 700); // Translate
// ... add drawing or text operators
builder.RestoreState();

Графическое состояние

GraphicsState отслеживает текущую матрицу преобразования, состояние текста и значения цветов во время выполнения операторов. Ключевые операции:

var gs = new GraphicsState();
gs.Save();
gs.ConcatMatrix(new Matrix(1, 0, 0, 1, 100, 200));
gs.Restore();

Операторы цвета

SetColor и SetColorStroke задают цвета заливки и обводки соответственно. Они принимают компоненты RGB, CMYK или оттенков серого.

// RGB fill color (blue)
var fill = new SetColor(0, 0, 1);

// RGB stroke color (red)
var stroke = new SetColorStroke(1, 0, 0);

Текстовые операторы

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

var textOp = new ShowText("Hello, PDF!");

SetTextMatrix позиционирует текст, определяя матрицу преобразования для
текстового пространства.


Расширенное графическое состояние

ExtGState управляет расширенными свойствами рендеринга, такими как заливка и обводка, альфа (прозрачность) и режим наложения.


Советы и лучшие практики

  • Всегда используйте парные операторы SaveState / RestoreState (или q / Q), чтобы избежать повреждения стека графического состояния.
  • Используйте ContentStreamBuilder для нового контента вместо ручного создания объектов операторов.
  • Проверьте OperatorCollection только для чтения перед изменением — неожиданные последовательности операторов могут вызвать проблемы с рендерингом.
  • Операторы цвета должны соответствовать текущему цветовому пространству (RGB, CMYK или градациям серого).
  • Используйте SetAdvancedColor для паттернов и цветовых пространств на основе ICC.

Общие проблемы

IssueCauseFix
Текст не виден после добавления операторовШрифт не установлен в состоянии текстаДобавьте оператор SetFont перед ShowText
Цвета отображаются неправильноНесоответствие цветового пространства (RGB vs CMYK)Используйте оператор, соответствующий активному цветовому пространству
Переполнение стека графического состоянияНесбалансированные пары Save / RestoreУбедитесь, что каждый SaveState имеет соответствующий RestoreState
Содержимое отображается в неправильном положенииОтсутствует или неверно задано преобразование матрицыПроверьте значения SetMatrix или ConcatMatrix

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

Что такое поток содержимого PDF?

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

Могу ли я добавить новый контент на существующую страницу?

Да. Доступ к page.Contents и добавьте новые операторы, или используйте ContentStreamBuilder для построения последовательности и добавления её.

Как сделать текст прозрачным?

Используйте ExtGState, чтобы установить альфа‑канал заливки (ca) в значение от 0 (полностью прозрачный) до 1 (полностью непрозрачный).


API Сводка справочного руководства

Class / MethodDescription
OperatorCollectionПоследовательность операторов контент‑потока на странице
ContentStreamBuilderFluent builder для построения последовательностей операторов
ContentStreamBuilder.SaveStateПоместить текущее графическое состояние в стек
ContentStreamBuilder.RestoreStateСнять графическое состояние со стека
ContentStreamBuilder.SetFillColorУстановить цвет заливки в текущем цветовом пространстве
ContentStreamBuilder.SetMatrixПрименить координатное преобразование
GraphicsStateОтслеживает матрицу преобразования, цвет и состояние текста
SetColorОператор, задающий цвет без обводки (заливка)
SetColorStrokeОператор, задающий цвет обводки
SetAdvancedColorОператор для паттерн/ICC‑основанных цветовых пространств
ShowTextОператор, отрисовывающий строку текста
SetTextMatrixОператор, позиционирующий текст с помощью матрицы
ExtGStateРасширенное графическое состояние (альфа, режим смешивания)

См. также

 Русский