Inhaltsverzeichnis

std.pdf.forms

PDF AcroForms (WP-PDF-18): Interaktive Formularfelder — Textfelder, Checkboxen, Radio-Buttons und Dropdown-Listen (ComboBox). Alle Felder werden als Widget-Annotations mit Appearance-Streams in das AcroForm-Dictionary eingebettet. Optional können alle Felder mit PdfFlattenForms in statischen Seiteninhalt umgewandelt werden.

std.pdf.annot · std.pdf.builder · Standard Library


Koordinaten-Packing

Position und Größe werden als gepackte int64-Werte übergeben (gleiche Konvention wie std.pdf.shading):

Alle Werte sind in ×100-Einheiten (100 = 1 PDF-Punkt).


Funktionen

Felder hinzufügen

Signatur Rückgabe Beschreibung
PdfAddTextField(doc, page, pos, size, name: pchar, defaultValue: pchar): int64 fieldId / −1 Einzeiliges bearbeitbares Textfeld. name: Feldname (/T). defaultValue: Initialwert (/V), 0 für leer.
PdfAddCheckbox(doc, page, pos, size100, name: pchar, checked: int64): int64 fieldId / −1 Quadratische Checkbox. size100: Seitenlänge ×100. checked: 1 = anfangs aktiviert, 0 = deaktiviert.
PdfAddRadioButton(doc, page, pos, size100, groupName: pchar, value: pchar): int64 fieldId / −1 Radio-Button in einer benannten Gruppe. Gruppen werden bei erstmaliger Nennung automatisch angelegt. value: Wert-String dieses Buttons (z. B. „Option1„).
PdfAddComboBox(doc, page, pos, size, name: pchar): int64 fieldId / −1 Dropdown-Liste. Items separat mit PdfComboAddItem hinzufügen.

Items und Aktionen

Signatur Beschreibung
PdfComboAddItem(doc: int64, fieldId: int64, item: pchar): void Hängt einen Eintrag an die Option-Liste einer ComboBox. Mehrfachaufruf für mehrere Einträge.
PdfFlattenForms(doc: int64): void Wandelt alle Formularfelder in statischen Seiteninhalt um. Das PDF wird danach nicht mehr interaktiv — Viewer zeigen die Felder als gezeichnetes Bild. Nützlich für Archivierung oder Druck.

Vollständige Signaturen

pub fn PdfAddTextField(doc: int64, page: int64, pos: int64, size: int64,
                        name: pchar, defaultValue: pchar): int64

pub fn PdfAddCheckbox(doc: int64, page: int64, pos: int64, size100: int64,
                       name: pchar, checked: int64): int64

pub fn PdfAddRadioButton(doc: int64, page: int64, pos: int64, size100: int64,
                          groupName: pchar, value: pchar): int64

pub fn PdfAddComboBox(doc: int64, page: int64, pos: int64, size: int64,
                       name: pchar): int64

pub fn PdfComboAddItem(doc: int64, fieldId: int64, item: pchar): void

pub fn PdfFlattenForms(doc: int64): void


Verwendung

Einfaches Formular

import std.pdf.forms;
import std.pdf.shading;   // für PdfPackCoords

fn AddContactForm(doc: int64, page: int64): void {
    // Textfeld "Name" — Position (50, 700), Größe 200×20 (×100: 5000×2000)
    var nameField := PdfAddTextField(doc, page,
        PdfPackCoords(5000, 70000),
        PdfPackCoords(20000, 2000),
        "name", "Ihr Name");

    // Textfeld "E-Mail"
    var mailField := PdfAddTextField(doc, page,
        PdfPackCoords(5000, 67000),
        PdfPackCoords(20000, 2000),
        "email", "");

    // Checkbox "Newsletter"
    var cbNews := PdfAddCheckbox(doc, page,
        PdfPackCoords(5000, 64000),
        1500,          // 15 × 15 Punkte
        "newsletter", 1);   // anfangs aktiviert
}

Radio-Gruppe

import std.pdf.forms;
import std.pdf.shading;

fn AddRadioGroup(doc: int64, page: int64): void {
    // Drei Radio-Buttons in Gruppe "priority"
    PdfAddRadioButton(doc, page,
        PdfPackCoords(5000, 70000), 1500, "priority", "high");

    PdfAddRadioButton(doc, page,
        PdfPackCoords(5000, 67500), 1500, "priority", "medium");

    PdfAddRadioButton(doc, page,
        PdfPackCoords(5000, 65000), 1500, "priority", "low");
}

ComboBox mit Einträgen

import std.pdf.forms;
import std.pdf.shading;

fn AddCountryDropdown(doc: int64, page: int64): void {
    var combo := PdfAddComboBox(doc, page,
        PdfPackCoords(5000, 70000),
        PdfPackCoords(15000, 2000),
        "country");

    PdfComboAddItem(doc, combo, "Deutschland");
    PdfComboAddItem(doc, combo, "Österreich");
    PdfComboAddItem(doc, combo, "Schweiz");
    PdfComboAddItem(doc, combo, "Liechtenstein");
}

Formular flattening für Archivierung

import std.pdf.forms;

fn SaveFlattened(doc: int64, path: pchar): void {
    // Alle Felder zeichnen und AcroForm entfernen
    PdfFlattenForms(doc);
    PdfSave(doc, path);
}


Hinweise


Verwandte Units

Letzte Aktualisierung: 2026-06-05