Table
type: "table"Renders structured rows and columns. Rows may be supplied inline or bound with an expression such as {{#each items}}; cell-level values may be scalars or rich content objects with spans and styles.
x / yTop-left position on the page.
widthOverall table width. Fixed column widths should normally add up to this value.
columnsColumn definitions. Each column has a key, optional header, width ({ mode: fixed | percent | auto, value? }), role, cell, and header_cell.
rowsA binding expression or inline row array. Object keys match columns[].key.
cellDefault cell style: fill, text, padding, borders, and content offsets.
headerHeader controls: show, repeat_on_page_break, default cell style, and optional multi-row header definitions.
bodyBody cell defaults and alternate_fill for zebra striping.
gridOuter and internal border strokes: top, right, bottom, left, horizontal, and vertical.
paginationPage-break behavior: keep_spans_together, row_min_height, and header_min_height.
preview_rowsStudio preview data. For dynamic production data, use rows binding and replace it through the Template API.
{
"type": "table",
"x": 20,
"y": 40,
"width": 170,
"columns": [
{ "key": "name", "header": "Name", "width": { "mode": "fixed", "value": 100 } },
{ "key": "amount", "header": "Amount", "width": { "mode": "fixed", "value": 70 } }
],
"rows": [
{ "name": "Design", "amount": "$120.00" },
{ "name": "Hosting", "amount": "$25.00" }
],
"header": { "show": true, "repeat_on_page_break": true },
"cell": { "padding": { "x": 2, "y": 2 }, "text": { "font_size": 9 } },
"grid": {
"horizontal": { "color": "#d1d5db", "width": 0.2 },
"vertical": { "color": "#d1d5db", "width": 0.2 }
}
}