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
Ü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) │
└──────────────────────────────────────────────────────────────────┘
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");
}
Alle PDF-Units gruppiert nach Aufgabenbereich:
| 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) |
| 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 |
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) |
| 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 |
| 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 |
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 |
| 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-06-05