Операции със съдържание
Операции със съдържание
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 за създаване на последователности от оператори на content‑stream, включващи управление на графично състояние, конструиране на пътеки, извеждане на текст и настройки на цвят.
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 срещу CMYK) | Използвайте оператора, съответстващ на активното цветово пространство |
| Препълване на стека на графичното състояние | Несъбаланост на двойките Save / Restore | Уверете се, че всеки SaveState има съответстващ RestoreState |
| Съдържанието се появява на грешна позиция | Липсва трансформация на матрицата или е неправилна | Проверете стойностите на SetMatrix или ConcatMatrix |
ЧЗВ
Какво е PDF content stream?
Потокът със съдържание е последователност от оператори, които описват как да се изобрази страница — чертаене на пътеки, поставяне на текст, задаване на цветове и управление на графичното състояние.
Мога ли да добавя ново съдържание към съществуваща страница?
Да. Достъпете 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 | Разширено графично състояние (алфа, режим на смесване) |