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
Koordinaten und Farben werden als gepackte int64-Werte übergeben, um das 6-Argument-Limit von Lyx einzuhalten.
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 |
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.
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 PdfSaveState → PdfClip → PdfLinearGradient → PdfRestoreState verwenden.
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 |
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);
}
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);
}
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);
}
PdfSaveState/PdfRestoreState um den Aufruf legen, wenn nur ein Teilbereich gefüllt werden soll.PdfLinearGradient- oder PdfRadialGradient-Aufruf erzeugt ein neues Shading-Objekt im PDF; mehrere Aufrufe auf derselben Seite sind möglich.std.pdf.graphics — Pfade, Clipping, Farben (PdfSaveState, PdfClip …)std.pdf.spot — Spot-Farben (Separation Color Space)std.pdf.builder — DokumenterstellungLetzte Aktualisierung: 2026-06-05