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, Annotationen, Lesezeichen, Metadaten und optionaler zlib-Kompression. Die Architektur ist modular: std.pdf ist der einzige öffentliche Einstiegspunkt; alle Untermodule werden intern genutzt.

Einsatzbereiche: Berichte, Rechnungen, Zertifikate, Dokumentationen, Präsentationen — alles was ein natives PDF-Ausgabeformat erfordert.

std.pdf.graphics · std.pdf.builder · std.pdf.page


Architektur

┌─────────────────────────────────────────────────────────────┐
│  std.pdf   (öffentliche API)                                │
├────────────┬────────────┬────────────┬─────────────────────┤
│ pdf.page   │pdf.graphics│  pdf.meta  │  pdf.annot          │
│ pdf.fonts  │ pdf.image  │pdf.outline │  pdf.reader         │
├────────────┴────────────┴────────────┴─────────────────────┤
│  pdf.builder   (Cross-Reference, 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.

import std.pdf;
import std.pdf.graphics;
import std.pdf.meta;
import std.pdf.annot;

fn CreateInvoice(): void {
    var doc: Pdf := PdfNew();

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

    // Seite erstellen
    var page: PdfPage := PdfAddPage(doc);

    // Text ausgeben
    PdfSetFont(page, PDF_FONT_HELVETICA_BOLD, 18);
    PdfSetColor(page, 0.0, 0.2, 0.6);
    PdfDrawText(page, 72.0, 750.0, "Rechnung 2026-001");

    PdfSetFont(page, PDF_FONT_HELVETICA, 11);
    PdfSetColor(page, 0.0, 0.0, 0.0);
    PdfDrawText(page, 72.0, 720.0, "Datum: 2026-05-22");

    // Linie
    PdfDrawLine(page, 72.0, 710.0, 540.0, 710.0);

    // Link-Annotation
    PdfAddUriAnnotation(page, 72.0, 680.0, 200.0, 695.0, "https://example.com");

    PdfSave(doc, "rechnung.pdf");
}


Units im Überblick

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.page Seitenverwaltung: PdfAddPage, PdfSetLandscape, Papiergrößen
std.pdf.fonts Standard-14-Schriftarten und AFM-Metriken
std.pdf.graphics Content-Stream: Text, Pfade, Farben, Transformationen
std.pdf.compress zlib/DEFLATE-Kompression für PDF-Streams
std.pdf.image Rasterbilder: PdfAddImage, PdfDrawImage
std.pdf.meta Dokument-Metadaten: Titel, Autor, Datum
std.pdf.annot Annotationen: URI-Links, GoTo-Links, Text-Notizen
std.pdf.reader PDF-Lesen: PdfOpen, Seitenanzahl, Metadaten
std.pdf.outline Lesezeichen: PdfOutlineAdd, Hierarchie
std.pdf.pagelabels Seitenbeschriftung: römisch, dezimal, alphabetisch
std.pdf.transition Seitenübergänge für Präsentationen
std.pdf.viewprefs Viewer-Einstellungen: Vollbild, Toolbar, Öffnungs-Action
std.pdf.namedest Benannte Sprungziele für interne Links
std.pdf.attach Eingebettete Dateianhänge
std.pdf.layer Optional-Content-Groups (Layer)

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

Letzte Aktualisierung: 2026-05-22