Операції з вмістом
Операції з вмістом
Сторінки 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 забезпечує плавний 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 керує розширеними властивостями рендерингу, такими як заповнення та обведення, alpha (прозорість) та режим змішування.
Поради та найкращі практики
- Завжди поєднуйте
SaveState/RestoreState(або операториq/Q), щоб уникнути пошкодження стеку стану графіки. - Використовуйте
ContentStreamBuilderдля нового вмісту, а не вручну створюючи об’єкти операторів. - Перевіряйте
OperatorCollectionлише для читання перед зміною — неочікувані послідовності операторів можуть спричинити проблеми з відображенням. - Оператори кольору повинні відповідати поточному простору кольору (RGB, CMYK або відтінкам сірого).
- Використовуйте
SetAdvancedColorдля шаблонних та ICC‑базованих просторів кольору.
Поширені проблеми
| Проблема | Причина | Виправлення |
|---|---|---|
| Текст не видно після додавання операторів | Не встановлено шрифт у стані тексту | Додайте оператор SetFont перед ShowText |
| Кольори відображаються неправильно | Несумісність простору кольору (RGB проти CMYK) | Використовуйте оператор, що відповідає активному простору кольору |
| Переповнення стеку графічного стану | Несбалансовані пари Save / Restore | Переконайтеся, що кожен SaveState має відповідний RestoreState |
| Вміст відображається в неправильному положенні | Відсутня або неправильна матрична трансформація | Перевірте значення SetMatrix або ConcatMatrix |
Часті питання
Що таке потік вмісту PDF?
Контентний потік — це послідовність операторів, які описують, як відобразити сторінку — малювання шляхів, розміщення тексту, встановлення кольорів та керування графічним станом.
Чи можу я додати новий вміст до існуючої сторінки?
Так. Доступ до page.Contents і додайте нові оператори, або використайте ContentStreamBuilder для створення послідовності та додайте її.
Як зробити текст прозорим?
Використовуйте ExtGState, щоб встановити альфу заповнення (ca) у значення між 0 (повністю прозорий) і 1 (повністю непрозорий).
Зведення довідки API
| Class / Method | Description |
|---|---|
OperatorCollection | Послідовність операторів потоку вмісту на сторінці |
ContentStreamBuilder | Багатокроковий будівник для створення послідовностей операторів |
ContentStreamBuilder.SaveState | Помістити поточний графічний стан у стек |
ContentStreamBuilder.RestoreState | Вилучити графічний стан зі стеку |
ContentStreamBuilder.SetFillColor | Встановити колір заливки у поточному колірному просторі |
ContentStreamBuilder.SetMatrix | Застосувати координатне перетворення |
GraphicsState | Відстежує матрицю перетворення, колір та стан тексту |
SetColor | Оператор, що встановлює колір без обведення (заливка) |
SetColorStroke | Оператор, що встановлює колір обведення |
SetAdvancedColor | Оператор для шаблонних / ICC‑базованих колірних просторів |
ShowText | Оператор, що виводить рядок тексту |
SetTextMatrix | Оператор, що позиціонує текст за допомогою матриці |
ExtGState | Розширений графічний стан (альфа, режим змішування) |