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
Position und Größe werden als gepackte int64-Werte übergeben (gleiche Konvention wie std.pdf.shading):
pos = PdfPackCoords(x100, y100) — linke untere Eckesize = PdfPackCoords(w100, h100) — Breite × Höhesize100 — bei quadratischen Feldern (Checkbox, Radio) ein einzelner Seitenlängenwert ×100Alle Werte sind in ×100-Einheiten (100 = 1 PDF-Punkt).
| 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. |
| 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. |
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
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
}
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");
}
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");
}
import std.pdf.forms;
fn SaveFlattened(doc: int64, path: pchar): void {
// Alle Felder zeichnen und AcroForm entfernen
PdfFlattenForms(doc);
PdfSave(doc, path);
}
fieldId ist der nullbasierte Index des Feldes im internen Feld-Array — stabil für PdfComboAddItem.PdfAddRadioButton: Gruppen werden automatisch bei erstmaliger Nennung von groupName angelegt. Alle Buttons derselben Gruppe teilen sich einen übergeordneten /Btn-Parent-Widget.PdfFlattenForms setzt intern das FORMFLAT-Flag: PdfSave überspringt dann das /AcroForm-Dictionary und die Widget-Annotations.PdfAddTextField/PdfAddCheckbox-Aufruf lazy angelegt — kein Overhead wenn keine Felder verwendet werden.std.pdf.annot — Hyperlink- und sonstige Annotationsstd.pdf.builder — Dokumenterstellung (PdfCreate, PdfSave)Letzte Aktualisierung: 2026-06-05