Операции с контентом
Операции с контентом
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.
Общие проблемы
| Issue | Cause | Fix |
|---|---|---|
| Текст не виден после добавления операторов | Шрифт не установлен в состоянии текста | Добавьте оператор SetFont перед ShowText |
| Цвета отображаются неправильно | Несоответствие цветового пространства (RGB vs CMYK) | Используйте оператор, соответствующий активному цветовому пространству |
| Переполнение стека графического состояния | Несбалансированные пары Save / Restore | Убедитесь, что каждый SaveState имеет соответствующий RestoreState |
| Содержимое отображается в неправильном положении | Отсутствует или неверно задано преобразование матрицы | Проверьте значения SetMatrix или ConcatMatrix |
Часто задаваемые вопросы
Что такое поток содержимого PDF?
Поток содержимого — это последовательность операторов, описывающих, как отрисовать страницу — рисование контуров, размещение текста, установка цветов и управление состоянием графики.
Могу ли я добавить новый контент на существующую страницу?
Да. Доступ к page.Contents и добавьте новые операторы, или используйте ContentStreamBuilder для построения последовательности и добавления её.
Как сделать текст прозрачным?
Используйте ExtGState, чтобы установить альфа‑канал заливки (ca) в значение от 0 (полностью прозрачный) до 1 (полностью непрозрачный).
API Сводка справочного руководства
| Class / Method | Description |
|---|---|
OperatorCollection | Последовательность операторов контент‑потока на странице |
ContentStreamBuilder | Fluent builder для построения последовательностей операторов |
ContentStreamBuilder.SaveState | Поместить текущее графическое состояние в стек |
ContentStreamBuilder.RestoreState | Снять графическое состояние со стека |
ContentStreamBuilder.SetFillColor | Установить цвет заливки в текущем цветовом пространстве |
ContentStreamBuilder.SetMatrix | Применить координатное преобразование |
GraphicsState | Отслеживает матрицу преобразования, цвет и состояние текста |
SetColor | Оператор, задающий цвет без обводки (заливка) |
SetColorStroke | Оператор, задающий цвет обводки |
SetAdvancedColor | Оператор для паттерн/ICC‑основанных цветовых пространств |
ShowText | Оператор, отрисовывающий строку текста |
SetTextMatrix | Оператор, позиционирующий текст с помощью матрицы |
ExtGState | Расширенное графическое состояние (альфа, режим смешивания) |