Inhaltsverzeichnis

std.pdf.ttfont

TrueType-Font-Einbettung mit Unicode-Unterstützung (WP-PDF-24). Lädt eine `.ttf`-Datei, baut beim Speichern automatisch einen Glyph-Subset (nur verwendete Zeichen) und bettet diesen als Type0/CIDFontType2 mit Identity-H-Encoding in das PDF ein. UTF-8-Text wird über eine ToUnicode-CMap korrekt durchsuchbar.

std.pdf.builder · std.pdf.fonts · Standard Library


Funktionen

Signatur Beschreibung
PdfLoadFont(doc: int64, path: pchar): int64 Lädt eine TrueType-Datei (path) und registriert sie im Dokument. Gibt fontId (≥ 0) zurück, −1 bei Fehler.
PdfFinalizeFont(doc: int64, fontId: int64): void Baut optional vorab einen minimalen Subset-TTF aus den bisher markierten Glyphen. Wird vor PdfSave aufgerufen, um die Dateigröße zu reduzieren. Ohne diesen Aufruf bettet PdfSave die vollständige TTF ein.
PdfSetFontTT(doc: int64, page: int64, fontId: int64, size: f64): void Wählt den TrueType-Font fontId mit Größe size (in PDF-Punkten) für nachfolgende PdfTextAtUTF8-Aufrufe auf page aus. Emittiert `/TF{fontId} {size} Tf` in den Content-Stream.
PdfTextAtUTF8(doc: int64, page: int64, x: f64, y: f64, text: pchar): void Platziert UTF-8-kodierten Text an Position (x, y) (PDF-Koordinatensystem, Ursprung unten links). Dekodiert UTF-8 → Unicode-Codepoint → Glyph-ID, markiert alle verwendeten Glyphen für den Subset und emittiert einen `BT … Td <hex> Tj ET`-Block.

Verwendung

Font laden und Text ausgeben

import std.pdf.builder;
import std.pdf.ttfont;

fn AddTitlePage(doc: int64, page: int64): void {
    var font := PdfLoadFont(doc, "/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf");
    if (font < 0) { return; }

    PdfSetFontTT(doc, page, font, 24.0);
    PdfTextAtUTF8(doc, page, 50.0, 750.0, "Überschrift mit Umlauten: ä ö ü");

    PdfSetFontTT(doc, page, font, 12.0);
    PdfTextAtUTF8(doc, page, 50.0, 700.0, "Fließtext mit Unicode: €, →, ©");
}

Subset vorab bauen (kleinere Ausgabedatei)

import std.pdf.builder;
import std.pdf.ttfont;

fn SaveWithSubset(doc: int64, path: pchar): void {
    // Text-Calls zuerst, damit alle Glyphen markiert sind
    // ...

    // Subset optimieren, dann speichern
    var i: int64 := 0;
    while (i < PdfFontCount(doc)) {
        PdfFinalizeFont(doc, i);
        i := i + 1;
    }
    PdfSave(doc, path);
}

Mehrere Fonts auf einer Seite

import std.pdf.ttfont;

fn MixedFonts(doc: int64, page: int64): void {
    var regular := PdfLoadFont(doc, "/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf");
    var bold    := PdfLoadFont(doc, "/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf");

    PdfSetFontTT(doc, page, regular, 12.0);
    PdfTextAtUTF8(doc, page, 50.0, 700.0, "Normaler Text");

    PdfSetFontTT(doc, page, bold, 12.0);
    PdfTextAtUTF8(doc, page, 50.0, 680.0, "Fetter Text");
}


Hinweise


Verwandte Units

Letzte Aktualisierung: 2026-06-05