Inhaltsverzeichnis

std.pdf.shading

PDF-Verlaufsfüllungen (Shading, WP-PDF-22): Axiale (lineare) und radiale Gradienten direkt im PDF-Content-Stream über Type 2- bzw. Type 3-Shading-Dictionaries. Koordinaten und Farben werden als kompakte int64-Packwerte übergeben.

std.pdf.builder · std.pdf.graphics · Standard Library


Packing-Funktionen

Koordinaten und Farben werden als gepackte int64-Werte übergeben, um das 6-Argument-Limit von Lyx einzuhalten.

PdfPackColor

pub fn PdfPackColor(r100: int64, g100: int64, b100: int64): int64

Packt RGB-Komponenten (je ×100, Bereich 0–10 000 entspricht 0 %–100 %) in ein int64:

r100 << 48 | g100 << 32 | b100 << 16
Beispiel Farbe
PdfPackColor(10000, 0, 0) Reines Rot
PdfPackColor(0, 0, 10000) Reines Blau
PdfPackColor(5000, 5000, 5000) Mittelgrau
PdfPackColor(10000, 10000, 10000) Weiß
PdfPackColor(0, 0, 0) Schwarz

PdfPackCoords

pub fn PdfPackCoords(x100: int64, y100: int64): int64

Packt zwei Koordinaten (je ×100, d. h. 100 entspricht 1,00 Punkt) in ein int64:

x100 << 32 | (y100 & 0xFFFFFFFF)

Wird für Start-/Endpunkte bei PdfLinearGradient und Mittelpunkt/Radien bei PdfRadialGradient verwendet.


Gradient-Funktionen

PdfLinearGradient

pub fn PdfLinearGradient(doc: int64, page: int64, p0: int64, p1: int64, c0: int64, c1: int64): void

Füllt den aktuellen Clipping-Bereich mit einem axialen Verlauf von c0 an p0 bis c1 an p1.

Parameter Typ Beschreibung
p0 PdfPackCoords(x100, y100) Startpunkt des Verlaufs
p1 PdfPackCoords(x100, y100) Endpunkt des Verlaufs
c0 PdfPackColor(r100, g100, b100) Farbe am Startpunkt
c1 PdfPackColor(r100, g100, b100) Farbe am Endpunkt

Der Gradient füllt die gesamte Seite, sofern kein Clipping gesetzt ist. Für einen begrenzten Bereich PdfSaveStatePdfClipPdfLinearGradientPdfRestoreState verwenden.

PdfRadialGradient

pub fn PdfRadialGradient(doc: int64, page: int64, center: int64, radii: int64, c0: int64, c1: int64): void

Füllt mit einem radialen Verlauf (konzentrische Kreise) von c0 am inneren Kreis bis c1 am äußeren Kreis. Beide Kreise teilen denselben Mittelpunkt.

Parameter Typ Beschreibung
center PdfPackCoords(cx100, cy100) Gemeinsamer Mittelpunkt
radii PdfPackCoords(r0_100, r1_100) Innenradius (r0) und Außenradius (r1)
c0 PdfPackColor(r100, g100, b100) Farbe am Innenkreis
c1 PdfPackColor(r100, g100, b100) Farbe am Außenkreis

Verwendung

Horizontaler Farbverlauf

import std.pdf.shading;

fn HorizontalGradient(doc: int64, page: int64): void {
    // Verlauf von links (Blau) nach rechts (Rot), volle Seitenbreite A4
    var p0 := PdfPackCoords(0,     84200);  // links, Mitte Y = 421 pt
    var p1 := PdfPackCoords(59500, 84200);  // rechts (595 pt)
    var c0 := PdfPackColor(0, 0, 10000);    // Blau
    var c1 := PdfPackColor(10000, 0, 0);    // Rot

    PdfLinearGradient(doc, page, p0, p1, c0, c1);
}

Diagonaler Verlauf mit Clipping

import std.pdf.shading;
import std.pdf.graphics;

fn ClippedGradient(doc: int64, page: int64): void {
    PdfSaveState(doc, page);

    // Rechteck als Clipping setzen (in ×100-Einheiten)
    PdfRect(doc, page, 5000.0, 60000.0, 20000.0, 10000.0);
    PdfClip(doc, page);

    var p0 := PdfPackCoords(5000,  70000);
    var p1 := PdfPackCoords(25000, 60000);
    var c0 := PdfPackColor(10000, 10000, 0);   // Gelb
    var c1 := PdfPackColor(0, 10000, 0);       // Grün

    PdfLinearGradient(doc, page, p0, p1, c0, c1);

    PdfRestoreState(doc, page);
}

Radialer Sonnen-Effekt

import std.pdf.shading;

fn SunEffect(doc: int64, page: int64): void {
    var cx := 29750;  var cy := 42100;  // Seitenmitte A4 (×100)
    var center := PdfPackCoords(cx, cy);
    var radii  := PdfPackCoords(0, 15000);  // innen r=0, außen r=150 pt

    var cInner := PdfPackColor(10000, 10000, 0);  // Gelb
    var cOuter := PdfPackColor(10000, 0,     0);  // Rot

    PdfRadialGradient(doc, page, center, radii, cInner, cOuter);
}


Hinweise


Verwandte Units

Letzte Aktualisierung: 2026-06-05