Inhaltsverzeichnis

std.pdf

PDF-Bibliothek für vollständige PDF-Erstellung und -Analyse aus Lyx — ohne externe Abhängigkeiten. Erzeugt Standard-konforme PDFs (PDF 1.7) mit Text, Vektorgrafiken, Rasterbildern, TrueType-Schriften, Farbverläufen, Sonderfarben, Annotationen, Formularen, Lesezeichen, Metadaten, XMP-Streams und optionaler zlib-Kompression. Für Langzeitarchivierung: PDF/A-1b, -2b, -3b.

Einsatzbereiche: Berichte, Rechnungen, Zertifikate, Dokumentationen, Präsentationen, ZUGFeRD/Factur-X-Rechnungen, formularbasierte Dokumente.

→ std.pdf.graphics · std.pdf.builder · std.pdf.page · std.pdf.image · std.pdf.imagefile


Architektur

Übersicht der internen Schichten und Abhängigkeiten:

┌──────────────────────────────────────────────────────────────────┐
│  std.pdf  (öffentliche API)                                      │
├──────────────┬──────────────┬──────────────┬─────────────────────┤
│ Seiten       │ Schriften     │ Farbe        │ Interaktiv          │
│ pdf.page     │ pdf.fonts     │ pdf.shading  │ pdf.annot           │
│ pdf.graphics │ pdf.ttfont    │ pdf.spot     │ pdf.forms           │
│ pdf.image    │               │              │ pdf.outline         │
│ pdf.xobject  │               │              │ pdf.namedest        │
├──────────────┴──────────────┴──────────────┴─────────────────────┤
│ Metadaten & Konformität                                          │
│ pdf.meta · pdf.xmp · pdf.pdfa · pdf.attach · pdf.layer          │
│ pdf.pagelabels · pdf.transition · pdf.viewprefs · pdf.reader     │
├──────────────────────────────────────────────────────────────────┤
│  pdf.builder  (XRef-Tabelle, Trailer, Objekt-Flattening)        │
├──────────────────────────────────────────────────────────────────┤
│  pdf.objects  (Byte-Buffer, Objekt-Nummerierung)                 │
│  pdf.compress (zlib/DEFLATE für Streams)                         │
└──────────────────────────────────────────────────────────────────┘


Einstieg: std.pdf

std.pdf stellt die vollständige öffentliche API bereit. Alle anderen PDF-Units werden automatisch als Abhängigkeiten gezogen — direkter Import der Untermodule ist nicht nötig.

unit main;
import std.io;
import std.string;
import std.pdf;

fn main(): int64 {
    var doc: int64 := PdfNew();

    // Metadaten
    PdfSetTitle(doc, "Rechnung 2026-001"c);
    PdfSetAuthor(doc, "Musterfirma GmbH"c);

    // Seite anlegen — A4 sind 595 x 842 Punkte
    var page: int64 := PdfAddPage(doc, 595.0, 842.0);

    // Text ausgeben
    PdfSetFont(doc, page, PDF_FONT_HELVETICA_BOLD, 18.0);
    PdfSetFillColor(doc, page, 0.0, 0.2, 0.6);
    PdfTextAt(doc, page, 72.0, 750.0, "Rechnung 2026-001"c);

    PdfSetFont(doc, page, PDF_FONT_HELVETICA, 11.0);
    PdfSetFillColor(doc, page, 0.0, 0.0, 0.0);
    PdfTextAt(doc, page, 72.0, 720.0, "Datum: 2026-05-22"c);

    // Trennlinie: Pfad aufbauen, dann zeichnen
    PdfSetStrokeColor(doc, page, 0.0, 0.0, 0.0);
    PdfSetLineWidth(doc, page, 1.0);
    PdfMoveTo(doc, page, 72.0, 710.0);
    PdfLineTo(doc, page, 540.0, 710.0);
    PdfStroke(doc, page);

    var rc: int64 := PdfSave(doc, "rechnung.pdf"c);
    Print("PdfSave rc = "); PrintLn(IntToStr(rc));
    PdfFree(doc);
    return 0;
}

PdfSave rc = 0

 
Es gibt keine Typen Pdf und PdfPage. Dokument und Seite sind int64-Handles. Ältere Fassungen dieser Seite zeigten Typnamen, die der Compiler nicht kennt.

Jede zeichnende Funktion nimmt doc und page — PdfSetFont(doc, page, …), nicht PdfSetFont(page, …). Ebenso gibt es weder PdfSetColor noch PdfDrawText oder PdfDrawLine; richtig sind PdfSetFillColor, PdfTextAt und der Dreischritt PdfMoveTo → PdfLineTo → PdfStroke.

Units im Überblick

Alle PDF-Units gruppiert nach Aufgabenbereich:

Kern-Infrastruktur

Unit Beschreibung
std.pdf Öffentlicher Einstiegspunkt: PdfNew, PdfSave, PdfAddPage
std.pdf.objects Primitive für PDF-Buffer: Byte-Schreiboperationen, Objekt-Nummerierung
std.pdf.builder Dokument-Builder: XRef-Tabelle, Trailer, Objekt-Flattening
std.pdf.compress zlib/DEFLATE-Kompression für PDF-Streams (intern genutzt)

Seiten & Inhalt

Unit Beschreibung
std.pdf.page Seitenverwaltung: PdfAddPage, PdfSetLandscape, Seitengrößen (A4, Letter, …)
std.pdf.graphics Content-Stream: Text ausgeben, Pfade zeichnen, Farben setzen, Transformationen, Clipping
std.pdf.image Rasterbilder: PdfAddImage (JPEG/RGB), PdfDrawImage mit Positionierung
std.pdf.xobject Form-XObjects: einmal zeichnen, beliebig oft auf beliebigen Seiten platzieren

Schriften

Funktionen für Schriftart-Verwaltung:

Unit Beschreibung
std.pdf.fonts Standard-14-Schriftarten (Helvetica, Times, Courier, …) und AFM-Metrik-Tabellen
std.pdf.ttfont TrueType-Schriften einbetten mit automatischem Unicode-Subsetting (Type0/CIDFontType2, UTF-8-Text)

Farbe

Unit Beschreibung
std.pdf.shading Farbverläufe: lineare (axiale) und radiale Gradient-Füllungen
std.pdf.spot Sonderfarben (Separation-Farbraum): PANTONE und andere benannte Farben mit CMYK-Alternativwert

Metadaten & Konformität

Unit Beschreibung
std.pdf.meta Dokument-Metadaten: Titel, Autor, Thema, Schlüsselwörter, Erstellungsdatum
std.pdf.xmp XMP-Metadaten-Stream im PDF-Katalog: PdfSetXMP, PdfGenerateXMP
std.pdf.pdfa PDF/A-Konformität (A-1b/A-2b/A-3b): OutputIntent, sRGB-ICC-Profil, pdfaid-XMP-Namespace
Unit Beschreibung
std.pdf.annot Annotationen: URI-Links, GoTo-Links, Text-Notizen
std.pdf.forms AcroForms: interaktive Felder — Text, Checkbox, Radio-Button, ComboBox; PdfFlattenForms
std.pdf.outline Outlines (Lesezeichen): PdfOutlineAdd, verschachtelte Hierarchie
std.pdf.namedest Benannte Sprungziele für interne Links und Outline-Verweise
std.pdf.pagelabels Seitenbeschriftung: römisch, dezimal, alphabetisch
std.pdf.transition Seitenübergänge für Präsentationen (Dissolve, Wipe, Push, Split)
std.pdf.viewprefs Viewer-Einstellungen: Toolbar, Vollbild, Öffnungs-Action

Sonstiges

Weitere Hilfsfunktionen:

Unit Beschreibung
std.pdf.reader PDF-Lesen: PdfOpen, Seitenanzahl, Metadaten-Extraktion
std.pdf.attach Eingebettete Dateianhänge: PdfAttachFile (Pflicht für PDF/A-3b)
std.pdf.layer Optional-Content-Groups (Layer/OCG): sicht- und ausblendbare Ebenen

Funktionen (std.pdf)

Signatur Sichtbarkeit Beschreibung
PdfNew(): Pdf pub Erstellt neues leeres PDF-Dokument
PdfAddPage(doc: Pdf): PdfPage pub Fügt neue A4-Seite hinzu
PdfAddPageSized(doc: Pdf, width: f64, height: f64): PdfPage pub Fügt Seite mit benutzerdefinierter Größe hinzu
PdfSave(doc: Pdf, path: pchar): bool pub Speichert Dokument als PDF-Datei
PdfFree(doc: Pdf): void pub Gibt Dokumentspeicher frei
 
PdfAddPageSized gibt es (#1246, nachgemessen mit lyxc 1.2.2B): die Funktion steht in std/pdf/page.lyx und nimmt Breite und Höhe als f64. Frühere Fassungen dieser Seite meldeten undefined symbol.

Letzte Aktualisierung: 2026-09-05 (#1246, nachgemessen mit lyxc 1.2.2B) — Kasten gezogen: PdfAddPageSized ist vorhanden.

Vorherige letzte Aktualisierung: 2026-08-09

Codebeispiele geprüft: gegen lyxc 1.2.5C übersetzt (Prüflauf 2026-09-08 über die gesamte Doku: 574 Vollprogramme, 0 echte Fehler; zusätzlich 5159 Aufrufe gegen die pub fn-Signaturen in aurum/std gehalten, 0 Abweichungen).