Produkt- und API-Leitfaden

Tabellendatenersteller

Datenersteller öffnen

Wählen Sie eine Tabelle auf der Arbeitsfläche. Öffnen Sie im Daten-Tab des Inspektors den Datenersteller. Die Tabs Felder, Quelle und Vorschau trennen Tabellenstruktur und Daten.

Spalten und Zusammenfassungszeilen

Fügen Sie unter Felder Spalten hinzu und legen Sie Überschrift und Datenfeld fest. Passen Sie Breite, Formatierung und erweiterte Darstellung an. Unter der Tabelle können Sie Summen-, Zwischensummen- oder Hinweiszeilen ergänzen. Der Abschnitt Summen erklärt die Berechnung.

Summen

Wählen Sie für eine Summen- oder Zwischensummenzeile eine Berechnung: Summe, Durchschnitt, Minimum, Maximum oder Zeilen zählen. Das Ergebnis steht in der Wertspalte und wird aus allen Zeilen dieser Spalte berechnet. Ohne eigenes Zeilenformat gilt das Spaltenformat.

JSON
"summaryRows": [
  { "type": "total", "label": "Gesamtbetrag",
    "aggregate": "sum", "targetColumnKey": "total" }
]

Es zählen nur als Zahlen übermittelte Zellen: Leere Zellen werden übersprungen, als Text gesendete Beträge („1,250.00“) lassen das Ergebnis leer. Auch Zwischensummen umfassen alle Zeilen, nicht einzelne Seiten. Bei Datenfeld liest das Wertfeld stattdessen von der Datenwurzel, nicht aus der Tabelle, zum Beispiel {{ grandTotal }}.

Quelle und Beispiel-JSON

Wählen Sie unter Quelle das Datenarray der Tabelle und bearbeiten Sie das Beispiel-JSON. Das Spaltenfeld muss einer Objekteigenschaft dieses Arrays entsprechen. Um etwa quantity aus items anzuzeigen, setzen Sie das Spaltenfeld auf quantity. Beheben Sie JSON-Warnungen vor dem Fortfahren.

Standarddarstellung der Tabelle

Position Menge Gesamt
Fehlerdiagnose21.700,00
Verbindungsmodul12.850,00
Kalibrierung vor Ort1850,00

Die Maße sind Produktstandardwerte: Kopfzeile 40px, Zeile 40px, Zellinnenabstand 10px, Rahmen 1px. Vorlagen können jeden Wert überschreiben.

Ein Tabellenelement von Anfang bis Ende

Eine Tabelle wird an ein Array in Ihren Daten gebunden und zeichnet pro Eintrag eine Zeile. Das folgende Element stammt aus der Rechnungsvorlage; der Aufruf darunter übergibt derselben Tabelle drei Zeilen.

JSON
{
  "id": "invoice-items",
  "type": "table",
  "placementMode": "flow",
  "binding": "lineItems",
  "layout": { "x": 0, "y": 330, "width": 100, "widthUnit": "percent", "height": 220 },
  "style": {
    "tableHeaderHeight": 36,
    "tableRowHeight": 34,
    "tableRepeatHeader": true,
    "tablePreventRowSplit": true
  },
  "columns": [
    { "key": "name", "label": "Beschreibung", "valueTemplate": "{{ name }}",
      "align": "left", "widthPercent": 46 },
    { "key": "quantity", "label": "Menge", "valueTemplate": "{{ quantity }}",
      "align": "right", "widthPercent": 14 },
    { "key": "unitPrice", "label": "Stückpreis", "valueTemplate": "{{ unitPrice }}",
      "align": "right", "widthPercent": 20,
      "format": { "kind": "currency", "currency": "USD", "decimals": 2 } },
    { "key": "total", "label": "Betrag", "valueTemplate": "{{ total }}",
      "align": "right", "widthPercent": 20,
      "format": { "kind": "currency", "currency": "USD", "decimals": 2 } }
  ]
}
cURL
curl -X POST https://api.pdfgine.com/api/v1/render \
  -H "X-PDFgine-Key: $PDFGINE_KEY" \
  -H "Content-Type: application/json" \
  -d '{
        "templateCode": "invoice",
        "format": "pdf",
        "locale": "de",
        "data": {
          "document": { "title": "Rechnungsübersicht" },
          "referenceNo": "DOC-2026-0042",
          "issueDate": "2026-09-06",
          "currency": "USD",
          "customer": "Northwind Trading Ltd.",
          "lineItems": [
            { "name": "Fehlerdiagnose", "quantity": 2, "unitPrice": 850.00 },
            { "name": "Verbindungsmodul", "quantity": 1, "unitPrice": 2850.00 },
            { "name": "Kalibrierung vor Ort", "quantity": 1, "unitPrice": 850.00 }
          ]
        }
      }'

binding bezeichnet das Array in Ihren Daten, key das Feld in jedem Eintrag und valueTemplate den auszugebenden Inhalt. tableRepeatHeader wiederholt die Kopfzeile auf jeder Seite; tablePreventRowSplit verhindert, dass eine Zeile bei einem Seitenumbruch geteilt wird.

Lange Tabellen anwenden und testen

Prüfen Sie Spaltenreihenfolge, leere Felder und Zusammenfassungen in der Vorschau und übernehmen Sie die Änderungen. Testen Sie anschließend null, eine und viele Zeilen in der Dokumentvorschau. Lange Texte sowie Kopf- und Zeilenhöhen beeinflussen die Seitenaufteilung; verlassen Sie sich nicht auf ein kurzes Beispiel.

Diagramme und Berichte →

Dataset-Elemente

Ein dataset-Element stellt seine gebundene Sammlung als Tabelle dar und leitet die Spalten selbst aus den Daten ab; Sie müssen sie nicht definieren. Nutzen Sie es, wenn die Struktur der Sammlung von den Nutzdaten statt von der Vorlage bestimmt wird.

Gebundener Wert Was das Dokument zeigt
[{ "name": "…", "quantity": 2 }] Eine Spalte pro Feld, in der Reihenfolge des ersten Auftretens. Lässt eine Zeile ein Feld aus, bleibt die Spalte bestehen.
[{ "party": { "name": "…" } }] Verschachtelte Objekte werden bis zu drei Ebenen tief zu Punktspalten wie party.name abgeflacht. Ein Array innerhalb einer Zeile bleibt in einer einzelnen Zelle.
["urgent", "warranty"] Eine Spalte mit den Werten selbst als Zellen; die Überschrift ist das letzte Segment der Bindung.
{ "status": "released" } Eine einzelne Zeile mit einer Spalte pro Objektfeld.
[] Es wird nichts gezeichnet. Auch ein ungebundenes dataset-Element zeichnet nichts.

Spaltenüberschriften sind Feldnamen. Ein dataset-Element besitzt keine eigenen Beschriftungen. Verwenden Sie ein Tabellenelement, wenn Sie Spalten selbst benennen möchten.

Häufige Fehler

  • Eine Bindung an ein nicht vorhandenes Array zeichnet eine leere Tabelle statt eines Fehlers. Bleibt die Tabelle leer, vergleichen Sie die Bindung mit dem Schlüssel Ihrer Anfrage.
  • Ein Spaltenschlüssel ist eine Eigenschaft der Objekte im Array. Ein Tippfehler leert nur eine Spalte, während die restliche Tabelle korrekt aussieht.
  • Beträge und Mengen müssen als Zahlen ankommen. Zeichenfolgen umgehen den Formatierer; die Spalte verliert dadurch Ausrichtung und Tausendertrennzeichen.
  • Lange Tabellen erstrecken sich über mehrere Seiten. Ohne tableRepeatHeader beginnt die zweite Seite ohne Kopfzeile; ohne tablePreventRowSplit kann eine Zeile geteilt werden.
  • Testen Sie null, eine und viele Zeilen. Eine Tabelle, die immer nur drei Zeilen enthielt, verbirgt sowohl den Leerfall als auch Seitenumbrüche.