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
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 TypenPdfPage. Dokument und Seite sindint64-Handles. Ältere Fassungen dieser Seite zeigten Typnamen, die der Compiler nicht kennt.
Jede zeichnende Funktion nimmtdocundpage—PdfSetFont(doc, page, …), nichtPdfSetFont(page, …). Ebenso gibt es wederPdfSetColornochPdfDrawTextoderPdfDrawLine; richtig sindPdfSetFillColor,PdfTextAtund der DreischrittPdfMoveTo→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 |
Navigation & Interaktivität
| 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 |
PdfAddPageSizedexistiert nicht — der Aufruf meldetundefined symbol. Für abweichende Seitengrößen bis auf WeiteresPdfAddPageverwenden.
(Issue #1246)
Letzte Aktualisierung: 2026-08-09
