Skip to main content
Tables display structured data in rows and columns with optional headers, styling, captions, and variable data binding.

Basic table

Properties

Cell format

Each cell in headers and rows can be either a simple string or a cell object: Simple string:
Cell object (for alignment, an embedded image, or a form field):

Cell object properties

Cell image properties

When a cell contains exactly one {{varName}} reference that resolves to an image variable, the cell is automatically rendered as an image. See Variables — Image variables in table cells.

Form fields in table cells

A cell may contain one form field instead of text or an image:
A cell may contain text, an image, or a form field, but not more than one of these at the same time. See the complete Form Fields reference.

Column widths

Use columnWidths when specific columns need a fixed or proportional width.
Supported width values: Mixed layouts are supported. In [4, "1fr", "2fr"], the first column is fixed at 4cm; the remaining width is split into three shares, one for column 2 and two for column 3. If fewer widths than columns are provided, remaining columns are treated as "auto". If more widths than columns are provided, validation fails.

Variable data binding

Instead of defining rows inline, bind a table to a table variable via dataSource. Use mapping to select and reorder columns.
When mapping is provided, only the specified columns (matched by name against the variable’s columns) are included. Without mapping, all data columns are used as-is.

Table style

Override the default table styling inline via the style property. This has the same structure as defaults.styles.table.
borders.outer / borders.innerheaderrowscellPadding

Captions and anchors

Add a caption for automatic table numbering and an anchor for cross-referencing.
The caption prefix (e.g., “Table”) and style are controlled by defaults.styles.tableCaption. See Defaults — Table caption style.

Defaults

Tables without an inline style inherit from defaults.styles.table: