Absolute Druckpositionen¶
Für millimetergenaue Nachbauten amtlicher Vordrucke reicht der fließende
Druck nicht: Briefkopf, Anschriftsblock und Unterschriftszeile müssen
exakt dort stehen, wo sie auf der Vorlage stehen. Dafür kann jedes Feld
eine Druckposition in Millimetern bekommen (kc:printPos).
Die drei Layout-Modi¶
In den Formular-Eigenschaften → Layout-Modus (Schlüssel
kc:document.layoutMode):
| Modus | Web | Wofür | |
|---|---|---|---|
| Fließend (Standard) | responsiv: Raster, Abschnitte | fließend | die meisten Formulare |
| Hybrid — Web fließend, PDF mm-genau | responsiv | positionierte Felder mm-genau | bequeme Erfassung am Bildschirm, amtlicher Ausdruck |
| Absolut — Position in Millimetern | A4-Blatt mit denselben Positionen | mm-genau | Web soll aussehen wie der Druck |
Datenmodell, Prüfungen, Lookups, Skripte und Speichern sind in allen
Modi gleich — nur die Darstellung wechselt. Der Wechsel ist verlustfrei:
Die Fluss-Einstellungen (kc:layout, kc:colspan, Abschnitte) bleiben
erhalten und greifen wieder, sobald du zurück auf Fließend stellst.
Im Hybrid-Modus stellt sich die Frage, was mit Feldern ohne
Druckposition geschieht — Formular-Eigenschaften → Felder ohne
Druck-Position (kc:document.printUnplaced):
| Einstellung | Wirkung |
|---|---|
| Im Fluss mitdrucken (Standard) | sie erscheinen im fließenden Druck, getrennt vom gestalteten Blatt |
| Weglassen | nur das gestaltete Blatt wird gedruckt |
| Als Block darunter anhängen | sie folgen als Block unter dem gestalteten Inhalt |
Schmale Bildschirme
Unter 1024 px Breite zeigt das Web auch ein Absolut-Formular fließend — ein A4-Blatt passt dort nicht. Der Druck bleibt mm-genau.
Wo pflege ich die Werte?¶
Am bequemsten im Druck-Canvas (siehe unten): Felder mit der Maus platzieren. Die Zahlen stehen außerdem in den Feld-Eigenschaften im Reiter Druck (nur im Hybrid- und Absolut-Modus):
- X / Y in Millimetern, Ursprung links oben.
- Breite / Höhe in Millimetern.
- Stil-Klasse —
Default,Default_8pt,Default_9pt,Default_12ptoder eine eigene. - Seite — überstimmt
kc:pagefür das PDF (leer = Seite des Feldes). - Z-Reihenfolge — höhere Werte werden später (also darüber) gezeichnet. Standard 0.
- Leittext im Ausdruck und Wenn der Text nicht passt — siehe unten.
Erst wenn X, Y, Breite und Höhe gesetzt sind, gilt das Feld als positioniert. Unvollständige Angaben werden ignoriert, damit beim Tippen keine kaputten Zwischenstände entstehen.
Schema¶
"Nachname": {
"type": "string",
"title": "Nachname",
"kc:maxLength": 30,
"kc:printPos": {
"x": 21.18,
"y": 198.52,
"width": 66,
"height": 5,
"styleClass": "Default",
"zOrder": 2,
"label": "left",
"labelWidthMm": 30
}
}
label steuert den Leittext und ist optional; ohne den Schlüssel
druckt nur der Wert. Erlaubt sind "left" und "above"; die
Spaltenbreite kommt aus labelWidthMm (Standard 55 mm). Die Langform
"label": { "position": "left", "widthMm": 30, "heightMm": 4.5 } hält die
Geometrie zusammen. Ein unbekannter Wert wirkt wie „nicht gesetzt".
Details unter Leittexte im Ausdruck.
Stilklassen (kc:printStyleClasses)¶
Schriftgrößen und -farben definierst du zentral als Stilklassen; die
Felder verweisen über styleClass darauf:
"kc:printStyleClasses": {
"Default": {
"fontFamily": "Arial",
"fontSize": 10,
"color": "#000000",
"verticalAlign": "top",
"overflow": "wrap"
},
"Default_8pt": { "base": "Default", "fontSize": 8 },
"Default_9pt": { "base": "Default", "fontSize": 9 },
"Default_12pt": { "base": "Default", "fontSize": 12 }
}
base vererbt: Default_8pt übernimmt alles von Default und ändert nur
die Schriftgröße. Aufgelöst wird in dieser Reihenfolge:
- Stilklassen des Formulars (dieser Block; im Formular-Editor unter Formular-Eigenschaften → Druck → Druck-Stilklassen),
- globale Stilklassen (
app_settings, Schlüsselprint.styleClasses), - eingebauter Standard (Arial 10 pt schwarz).
Einzelne Abweichungen gehen in kc:printPos.inlineStyle:
"kc:printPos": {
"x": 20.32, "y": 169.51, "width": 183.68, "height": 5.93,
"styleClass": "Default_12pt",
"inlineStyle": { "font-weight": "bold" }
}
Linien und Rahmen¶
Zu einem Vordruck gehören auch Rahmen um Abschnitte und Trennlinien.
kc:line — Linie¶
"line_person_h": {
"type": "string",
"kc:line": { "lineColor": "#000000", "lineWidth": 0.1, "dashType": "solid" },
"kc:printPos": { "x": 20.15, "y": 204.15, "width": 183, "height": 0, "zOrder": 1 }
}
dashType: solid, dashed oder dotted (bei dashed zusätzlich
dashSize und gapSize). Höhe 0 = waagrecht, Breite 0 = senkrecht,
beides gesetzt = diagonal.
kc:box — Rechteck¶
"box_person": {
"type": "string",
"kc:box": { "lineColor": "#000000", "fillColor": "transparent", "lineWidth": 0.1 },
"kc:printPos": { "x": 20.15, "y": 194.15, "width": 183, "height": 20, "zOrder": 0 }
}
fillColor: "transparent" (oder leer) zeichnet nur den Umriss, eine Farbe
füllt den Hintergrund. Z-Reihenfolge 0 legt Rahmen unter Texte und Linien.
Im Baukasten gibt es dafür im Ordner Layout „Trennlinie (horizontal)", „Trennlinie (vertikal)" und „Rahmen-Box". Linien und Rahmen zeichnet auch das Web-Formular (im Absolut-Modus an ihrer Position); Eingabefelder liegen dabei immer über den Rahmen.
Nur-Druck- und Nur-Web-Elemente¶
kc:visible: falseblendet ein Element im Web aus; gedruckt wird es trotzdem (der Druck prüft nurkc:printable). So entstehen reine Druck-Beschriftungen.- Umgekehrt: Abschnittsüberschriften, die nur der Web-Gliederung dienen,
bekommen
kc:printable: false— im PDF liefert das gestaltete Blatt seine eigenen Überschriften.
Beispiel: Hybrid¶
Eine bequeme Web-Erfassung mit Abschnitten und 3-Spalten-Raster und ein millimetergenauer Ausdruck aus demselben Formular:
{
"type": "object",
"kc:layout": "horizontal-3",
"kc:document": { "layoutMode": "hybrid" },
"kc:pdfFieldBorders": false,
"kc:printStyleClasses": { },
"kc:pages": [{ "id": "Seite1", "title": "Antrag", "format": "A4" }],
"properties": {
"_web_sec_person": {
"type": "string", "kc:section": true, "title": "I. Angaben zur Person",
"kc:colspan": "full", "kc:printable": false
},
"Nachname": {
"type": "string", "title": "Nachname", "kc:maxLength": 30,
"kc:printPos": { "x": 21.18, "y": 198.52, "width": 66, "height": 5,
"styleClass": "Default", "zOrder": 2 }
},
"lbl_nachname": {
"type": "string", "kc:visible": false,
"kc:text": { "content": "Nachname:", "level": "p" },
"kc:printPos": { "x": 21.18, "y": 194.44, "width": 19.98, "height": 3.78,
"styleClass": "Default_8pt", "zOrder": 1 }
}
}
}
Das Web zeigt den Abschnitt „I. Angaben zur Person" und das Feld „Nachname" in der ersten Spalte. Das PDF zeichnet die Beschriftung „Nachname:" und darunter den Wert — an den Millimeter-Positionen der Vorlage.
Beispielformular¶
Das Beispielformular Reiterplakette Stadt Hagen (Katalog Öffentlich, installierbar unter System-Administration → Formular-Bausteine → Beispiele) nutzt alle Mechaniken dieser Seite: Stilklassen, Druckpositionen, reine Druck-Beschriftungen, Linien und Rahmen, dazu eine parallele Web-Gliederung. Öffne es im Formular-Editor, um den Druck-Canvas mit fertig platzierten Feldern zu sehen.
Der Druck-Canvas im Formular-Editor¶
Im Hybrid- und Absolut-Modus zeigt den Formular-Editor statt der fließenden Vorschau ein Blatt Papier: Felder mit der Maus ziehen, Lineale am Rand, Einrastraster.
Was du im Canvas siehst¶
- Ein A4-Blatt (210 × 297 mm) bei 96 dpi — 1 mm = 3,78 Pixel. Standard-Zoom 100 %.
- Lineale oben und links in mm: beschriftete Striche alle 10 mm, Mittelstriche alle 5 mm, ab 75 % Zoom Millimeterstriche.
- Eine Leiste oben: Status („A4 hochkant · X platziert · Y offen"), Raster („aus / 1 / 5 / 10 mm"), Zoom (50–150 %).
- „Noch nicht platziert", sobald Felder ohne Druckposition vorliegen — mit Knopf zur automatischen Platzierung.
- Kopf- und Fußbereich als schraffierte Zonen, wenn eine Kopf- oder Fußzeile definiert ist.
Felder bewegen¶
Klick auf ein Feld wählt es aus; acht Anfasser erscheinen rundum.
Ziehen auf der Feldfläche verschiebt das Feld; die Koordinaten stehen live darunter („45,3, 102,7 mm"). Loslassen übernimmt die Position.
Ziehen an einem Anfasser ändert die Größe (Mindestgröße 5 × 5 mm, höchstens bis zum Papier- bzw. Kopf-/Fußrand).
Esc während des Ziehens bricht ab; das Feld springt zurück.
Mehrere Felder gleichzeitig¶
Strg-/Cmd-Klick fügt ein Feld der Auswahl hinzu. Ziehen auf einem ausgewählten Feld bewegt die ganze Gruppe.
Auf freier Fläche ziehen zeichnet einen Auswahlrahmen; Felder, die ihn berühren, kommen in die Auswahl. Mit Umschalt beim Start wird die Auswahl erweitert statt ersetzt.
Ab zwei ausgewählten Feldern erscheint eine Leiste zum Ausrichten und Verteilen:
| Symbol | Funktion |
|---|---|
| ⫷ | linksbündig |
| ⇔ | horizontal zentriert |
| ⫸ | rechtsbündig |
| ⫶ | oben/unten bündig |
| ⇕ | vertikal zentriert |
| ⇿ | horizontal gleichmäßig verteilen (ab 3 Feldern) |
| ⇳ | vertikal gleichmäßig verteilen (ab 3 Feldern) |
Jeder Schritt lässt sich mit Strg+Z rückgängig machen.
Einrastraster¶
Standardmäßig rastet Ziehen und Größenänderung auf 5 mm ein — umschaltbar auf aus / 1 / 5 / 10 mm; das aktive Raster erscheint als Punktmuster.
Umschalt während des Ziehens kehrt das Verhalten um: bei aktivem Raster frei, bei ausgeschaltetem Raster auf 1 mm.
Das Raster wirkt auf die Bewegung, nicht auf die Endposition. Felder mit krummen Koordinaten (z. B. 23,7 mm aus einem Import) behalten ihren Versatz und bewegen sich in 5-mm-Schritten von dort weg.
Felder neu hinzufügen¶
Ein Element aus dem Baukasten auf das Papier ziehen — das Blatt bekommt einen farbigen Rand. Loslassen legt das Feld an der Mausposition an, mit Standardgröße:
- Texteingabe, Zahl, Datum: 60 × 8 mm
- Abschnitt, Leittext: 100 × 6 mm
- Textbereich: 80 × 30 mm
Ein fließendes Formular umstellen¶
Felder ohne Druckposition stehen unter „Noch nicht platziert". „Alle automatisch platzieren" packt sie von oben nach unten auf das Blatt:
- Start 20 mm unter dem oberen Rand (bzw. unter der Kopfzeile).
- Links 20 mm, Breite 170 mm.
- Höhe nach Art: 6 mm für Abschnitte und Leittexte, 30 mm für Textbereiche, sonst 8 mm; vor Überschriften 4 mm Luft.
- Reihenfolge wie im Schema.
Bereits positionierte Felder bleiben unverändert. Strg+Z nimmt die ganze
Platzierung in einem Schritt zurück.
Leittexte im Ausdruck¶
Ein positioniertes Feld druckt standardmäßig nur seinen Wert — Vordrucke bringen ihre Beschriftung meist als eigene Textelemente mit. Für selbst gebaute Druckbilder gibt es im Reiter Druck die Einstellung „Leittext im Ausdruck":
| Einstellung | Wirkung |
|---|---|
| kein Leittext (Standard) | nur der Wert |
| links neben dem Wert | Titel in eigener Spalte links (Standard 55 mm), Wert rechts |
| über dem Wert | Titel in einem 4,5 mm hohen Band über dem Wert |
Der Leittext liegt innerhalb des Rechtecks — das Feld wird dadurch nicht größer. Der Canvas zeigt die Aufteilung mit einer gestrichelten Trennlinie, genau wie sie gedruckt wird.
„Alle automatisch platzieren" setzt bei Eingabefeldern von sich aus links. Überschriften und Leittexte bekommen keine Spalte.
Zwei Knöpfe in der Canvas-Leiste¶
- „Leittexte anschalten (n)" — gibt allen platzierten Eingabefeldern ohne Leittext auf einmal eine Leittext-Spalte.
- „Leittexte ausleiten (n)" — macht aus jeder Leittext-Spalte ein
eigenes
kc:text-Element an derselben Stelle. Danach lässt es sich frei verschieben, mehrzeilig setzen und eigens gestalten.
Das ist eine Einbahnstraße: Aus freien Textelementen wird keine Spalte mehr. Solange du keinen Feinschliff brauchst, ist die Spalte am Feld die bessere Wahl — sie zieht beim Verschieben, Umbenennen und Übersetzen mit.
Abschnittsüberschriften¶
Ein Feld mit kc:section druckt an seiner Position als Überschrift:
feine Linie an der Oberkante, darunter der Titel in Abschnittsfarbe. Die
Schriftgröße folgt kc:sectionLevel (18/15/13 pt) und wird verkleinert,
wenn das Rechteck zu flach ist. kc:sectionStyle: "spacing" lässt die
Linie weg.
Wenn der Text nicht passt¶
Ein positioniertes Feld hat eine feste Höhe, sein Inhalt nicht. Was passiert, wenn mehr Text eingegeben wird, als der Kasten fasst, legst du im Reiter Druck unter „Wenn der Text nicht passt" fest — oder für das ganze Formular in den Formular-Eigenschaften unter „Text passt nicht in sein Druckfeld". Die Einstellung am Feld schlägt die des Formulars.
| Einstellung | Schlüssel | Was im Ausdruck passiert |
|---|---|---|
| Überdrucken | (keiner) | Der Text läuft über den Kasten hinaus. Der Server schreibt eine Warnung ins Log. |
| Abschneiden | clip |
Nur die Zeilen, die in den Kasten passen; die letzte endet mit „…". |
| Schrift verkleinern | shrink |
Die Schrift wird in halben Punkten verkleinert, bis der Text passt — höchstens bis zur kleinsten Schrift (Standard 7 pt). Reicht das nicht, greift die Folgestufe „Reicht auch das nicht" in Originalgröße. |
| Wachsen bis zur Fußzeile | grow |
Der Kasten wird so hoch wie nötig, höchstens bis zur Fußzeile. Alles darunter rückt nach. Was dann noch nicht passt, wird abgeschnitten. |
| Wachsen + Fortsetzungsseite | continue |
Wie Wachsen; der Rest kommt auf eine Fortsetzungsseite mit Standardkopf und -fuß, unter der Überschrift „Feldtitel (Fortsetzung)" über die volle Breite. Felder, die durch das Nachrücken nicht mehr aufs Blatt passen, wandern mit — mit unveränderten Abständen untereinander. |
| Kasten bleibt, Rest als Anlage | annex |
Das Blatt bleibt exakt unverändert. Im Kasten steht der Anfang und „… Fortsetzung siehe Anlage 1", der volle Text folgt am Dokumentende auf einer eigenen Seite „Anlage 1 – Feldtitel". Die Wahl für amtliche Vordrucke, deren Layout sich nicht verschieben darf. |
Im Schema:
"kc:printPos": {
"x": 20, "y": 190, "width": 170, "height": 30,
"overflow": "shrink",
"overflowMinSizePt": 8,
"overflowThen": "continue"
}
Formular-Standard: "kc:document": { "printOverflow": "continue" }.
Was nachrückt¶
Alles, was unterhalb des wachsenden Feldes beginnt — unabhängig davon, ob es direkt darunter liegt oder seitlich versetzt. Nur so bleiben getrennt gesetzte Leittexte bei ihrem Wert. Was in derselben Zeile wie das wachsende Feld steht (etwa ein Leittext links daneben), bleibt stehen. Wachsen zwei Felder nebeneinander unterschiedlich weit, rückt der Inhalt darunter um das größere Wachstum nach.
Ein Element, das schon ohne Nachrücken über die Fußzeile ragt, bleibt, wo es ist — das gilt als Gestaltung des Vordrucks, nicht als Überlauf.
Grenzen¶
- Die Seitenzahl
${document:pages}in positionierten Texten zählt Fortsetzungs- und Anlagenseiten mit, allerdings geschätzt. Die Seitenzahlen in Kopf- und Fußzeilen stimmen immer exakt. - Ein Element, das nicht wachsen darf und höher ist als eine ganze Seite (etwa ein großes Bild), wird nicht geteilt.
- Die Schrift im Absolut-Druck ist Helvetica; Messung und Druck nutzen dieselbe Schrift, damit die geplanten Höhen stimmen.
Lange Texte laufen über so viele Fortsetzungsseiten wie nötig. Stehen mehrere lange Felder untereinander, setzen sie sich nacheinander fort: erst der Rest des oberen Feldes, dann das nächste Feld, das dort wieder wächst und bei Bedarf eine weitere Folgeseite beginnt — bis alles gedruckt ist.
Kopf- und Fußbereich¶
Hat das Formular eine Kopf- oder Fußzeile (eigene oder aus einer Druckvorlage), berücksichtigt der Canvas das automatisch:
- Die Höhen kommen aus
kc:document.header.heightMm/footer.heightMmbzw. aus der Druckvorlage. - Beide Zonen erscheinen schraffiert; der Tooltip nennt die Höhe.
- Felder lassen sich nicht in diese Zonen ziehen. Soll ein Feld bewusst darüber liegen, das Band kleiner machen oder die Position im JSON-Editor eintragen.
- Die automatische Platzierung beginnt unter der Kopfzeile.
Im Ausfüllmodus¶
Im Absolut-Modus zeigt auch das Web-Formular ein A4-Blatt mit denselben
Positionen — der Anwender sieht dasselbe Bild wie beim Bearbeiten im Formular-Editor und
später im PDF (ab 1024 px Fensterbreite). Das ältere Schema-Flag
kc:absoluteLayout: true wirkt weiterhin wie der Absolut-Modus.
Tastatur¶
| Taste | Wirkung |
|---|---|
| Strg-/Cmd-Klick | Feld zur Auswahl hinzufügen / entfernen |
| Umschalt beim Auswahlrahmen | Auswahl erweitern |
| Umschalt beim Ziehen | Raster umkehren (an ↔ aus) |
| Esc beim Ziehen | abbrechen, zurück zur Ausgangsposition |
| Strg+Z / Strg+Y | Rückgängig / Wiederholen |
Was der Canvas nicht kann¶
- Eine Canvas-Seite = eine Druckseite. Mehrseitige Vordrucke baust du
über
kc:pagesund wechselst über die Seiten-Tabs. - Keine gemeinsame Größenänderung mehrerer Felder.
- Keine Drehung — Felder bleiben achsparallel.
- Kein Zoom einzelner Felder — der Zoom skaliert das ganze Blatt.