Branding
Logo, Markenfarben und Typografie in BlockTemplate. Statt Farbwerte und Schriftgrößen in jedem Block zu wiederholen, definierst du Design-Tokens einmal in page und referenzierst sie — ein Wertewechsel aktualisiert die gesamte Vorlage.

Logo
image-Block mit src (URL, Base64 oder Platzhalter). fit: [breite, höhe] skaliert proportional in die Box.
Farben
colorScheme definiert benannte Tokens. Blöcke referenzieren sie via { token: '…' } — ein Wert ändert alle Stellen.
Schriften
defaultFont setzt die Standardfamilie. fontSizes-Tokens halten die Typo-Skala konsistent (body, heading, small, total).
Logo einbinden
Als image-Block mit URL, Base64-Data-URI oder Platzhalter. fit skaliert proportional in eine Zielbox, ohne das Seitenverhältnis zu verzerren.
1{2 "type": "image",3 "data": {4 "src": "https://cdn.example.com/logo.png",5 "fit": [120, 60],6 "alignment": "right"7 }8}9// Alternativ: Base64 Data URI für garantierte Offline-Renderfähigkeit10// "src": "data:image/png;base64,iVBORw0KGgoAAAANS..."Design-Tokens definieren
page.colorScheme und page.fontSizes halten benannte Werte. Namen sind frei wählbar — bewährt haben sich semantische Tokens wie primaryColor oder headingSize.
1{2 "page": {3 "size": "A4",4 "margins": { "top": 40, "right": 40, "bottom": 40, "left": 40 },5 "colorScheme": {6 "primaryColor": "#4f46e5",7 "accentColor": "#8b5cf6",8 "textColor": "#111111",9 "mutedColor": "#6b7280",10 "lineColor": "#e5e7eb"11 },12 "fontSizes": {13 "bodySize": 10,14 "smallSize": 8,15 "headingSize": 18,16 "totalSize": 1217 }18 }19}Tokens referenzieren
Überall, wo ein Block einen Farb- oder Größenwert erwartet, kannst du stattdessen { token: '…' } übergeben.
1{2 "type": "text",3 "data": {4 "content": "RECHNUNG {{invoiceNumber}}",5 "fontSize": { "token": "headingSize" },6 "color": { "token": "primaryColor" },7 "bold": true8 }9}10 11{12 "type": "table",13 "data": {14 "dataSource": "{{items}}",15 "headerFillColor": { "token": "primaryColor" },16 "headerTextColor": "#FFFFFF",17 "fontSize": { "token": "bodySize" },18 "columns": [ /* ... */ ]19 }20}Benannte Styles für wiederkehrende Elemente
Das styles-Objekt bündelt Font-, Farb- und Margin-Presets. Blöcke verweisen per style-Property darauf. Design-Tokens sind auch hier erlaubt.
1{2 "styles": {3 "h1": { "fontSize": 22, "bold": true, "color": { "token": "primaryColor" } },4 "h2": { "fontSize": 14, "bold": true, "margin": [0, 0, 0, 6] },5 "muted": { "color": { "token": "mutedColor" } },6 "total": { "fontSize": 14, "bold": true, "alignment": "right" }7 }8}9 10// Blöcke referenzieren Styles per Name:11{ "type": "text", "data": { "content": "RECHNUNG", "style": "h1" } }Header & Footer
header und footer sind optional und haben unterschiedliche Vorgaben: header.repeatOnAllPages ist ohne Angabe true, footer.repeatOnAllPages ohne Angabe false. Steht der Wert auf false, wandert der Abschnitt in den Textfluss und erscheint damit am Anfang (Header) bzw. am Ende des Inhalts (Footer) — nicht auf der letzten Seite. Beide akzeptieren dieselben 17 Block-Typen wie body.
1{2 "header": {3 "height": 80,4 "repeatOnAllPages": true,5 "blocks": [6 {7 "type": "columns",8 "data": {9 "columns": [10 { "width": "*", "blocks": [11 { "type": "text", "data": { "content": "{{seller.name}}", "style": "h2" } }12 ]},13 { "width": "auto", "blocks": [14 { "type": "image", "data": { "src": "https://cdn.example.com/logo.png", "fit": [120, 60] } }15 ]}16 ]17 }18 }19 ]20 },21 "footer": {22 "repeatOnAllPages": true,23 "blocks": [24 { "type": "line", "data": { "thickness": 0.5, "color": { "token": "lineColor" } } },25 { "type": "text", "data": {26 "content": "{{seller.name}} • USt-IdNr. {{seller.vatId}} • {{seller.email?}}",27 "fontSize": { "token": "smallSize" },28 "color": { "token": "mutedColor" },29 "alignment": "center"30 }}31 ]32 }33}