Table#
Renderiza uma tabela completa com header, linhas de dados e estilos configuráveis. Alternativa ao uso de bands detail quando se quer uma tabela self-contained dentro de qualquer band.
JSON#
{
"type": "table",
"id": "items_table",
"x": 30,
"y": 10,
"width": 500,
"dataSourceId": "items",
"showHeader": true,
"alternateRowColors": true,
"columns": [
{ "id": "col1", "header": "Produto", "binding": "product", "width": 250 },
{ "id": "col2", "header": "Qtd", "binding": "quantity", "width": 80, "format": "integer", "align": "right" },
{ "id": "col3", "header": "Preço", "binding": "price", "width": 120, "format": "currency:BRL", "align": "right" }
]
}
Propriedades#
| Propriedade | Tipo | Padrão | Descrição |
|---|---|---|---|
width | double | — | Largura total da tabela |
columns |
array |
— | Lista de colunas (TableColumn) |
dataSourceId |
string |
null |
Data source que alimenta as linhas |
showHeader |
bool |
true |
Exibir linha de cabeçalho |
headerFill |
string |
"f0f0f0" |
Cor de fundo do cabeçalho (hex) |
headerTextColor |
string |
"000000" |
Cor do texto do cabeçalho (hex) |
headerBold |
bool |
true |
Cabeçalho em negrito |
headerFontSize |
double |
12.0 |
Tamanho da fonte do cabeçalho |
headerHeight |
double |
18.0 |
Altura das células do cabeçalho |
columnFontSize |
double |
12.0 |
Tamanho da fonte padrão das linhas |
rowHeight |
double |
16.0 |
Altura das células de dados |
rowTextColor |
string |
"000000" |
Cor do texto das linhas de dados (hex) |
borderColor |
string |
"000000" |
Cor das bordas |
borderWidth |
double |
1.0 |
Espessura das bordas |
showColumnBorders |
bool |
true |
Exibir bordas verticais (entre colunas) |
showRowBorders |
bool |
true |
Exibir bordas horizontais (entre linhas) |
alternateRowColors |
bool |
false |
Alternar cores de fundo nas linhas |
evenRowFill |
string |
"ffffff" |
Cor das linhas pares |
oddRowFill |
string |
"f9f9f9" |
Cor das linhas ímpares |
TableColumn#
| Propriedade | Tipo | Padrão | Descrição |
|---|---|---|---|
id | string | — | Identificador |
header | string | — | Texto do cabeçalho |
binding | string | — | Campo do registro |
width | double | — | Largura da coluna |
format |
string |
"" |
Formato de exibição |
align |
string |
"left" |
Alinhamento (left, center, right) |
fontSize |
double |
null |
Sobrescreve columnFontSize para esta coluna específica |
wrapText |
bool |
false |
Quebra o texto em múltiplas linhas na célula (PDF) |
rounding |
object |
null |
Configuração de arredondamento |
inputDateFormat |
string |
"auto" |
Formato de entrada para campos de data:
"auto"
,
"unix_s"
,
"unix_ms"
,
"iso"
|
valueExpression |
string |
null |
Expressão avaliada antes da formatação.
value
contém o valor bruto do binding; outros campos da linha também estão disponíveis. Ex:
"PARSE_NUMBER(price) * quantity"
|
conditionalStyles |
array |
[] |
Regras de estilo condicional para as células desta coluna. Ver CellStyleRule . |
Editor de colunas no Studio#
Ao selecionar um TableElement no canvas, o botão Editar Tabela abre o TableEditorDialog:
- Busca de colunas — campo de filtro por
headeroubinding - Seções colápsáveis por coluna — padrão expandido
-
Aplicar estilo a todas — propaga
fontSize,alignewrapTextde uma coluna para todas as demais com um clique
Modo Pivot#
Quando a propriedade pivot está presente no elemento table, ele entra no modo pivot: os dados planos (um registro por célula) são agrupados em uma matriz dinâmica
linhas × colunas em tempo de renderização. As columns normais são ignoradas — os cabeçalhos são gerados a partir dos valores distintos de
columnField.
{
"type": "table",
"id": "pivot_icms",
"x": 0, "y": 10, "width": 782, "height": 0,
"dataSourceId": "arrecadacao",
"headerFill": "2e7d32",
"headerTextColor": "ffffff",
"columns": [],
"pivot": {
"rowFields": ["estado"],
"columnField": "mes",
"valueField": "icms",
"verb": "SUM",
"showRowTotals": true,
"showColumnTotals": true,
"totalLabel": "Total",
"columnSort": "alpha",
"totalsFill": "1b5e20",
"totalsTextColor": "ffffff",
"totalsBold": true
}
}
Use
height: 0na band que contém a tabela pivot para que o PDF calcule a altura automaticamente.
TablePivotConfig#
| Propriedade | Tipo | Padrão | Descrição |
|---|---|---|---|
rowFields |
string[] |
— |
Obrigatório.
Campos que formam os rótulos de linha. Suporta múltiplos para agrupamento hierárquico (ex:
["regiao", "estado"]
)
|
columnField |
string |
— | Obrigatório. Campo cujos valores distintos viram cabeçalhos de coluna |
valueField |
string |
— | Obrigatório. Campo numérico agregado em cada célula |
verb |
string |
"SUM" |
Função de agregação:
"SUM"
,
"AVG"
,
"COUNT"
,
"MIN"
,
"MAX"
|
showRowTotals |
bool |
true |
Adiciona coluna "Total" ao final de cada linha |
showColumnTotals |
bool |
true |
Adiciona linha "Total" ao rodapé da tabela |
totalLabel |
string |
"Total" |
Rótulo da linha/coluna de total |
columnOrder |
string[] |
[] |
Colunas explicitamente posicionadas primeiro (na ordem fornecida). As demais seguem
columnSort
|
columnSort |
string |
"alpha" |
Ordenação das colunas não fixadas por
columnOrder
:
"alpha"
(A→Z),
"alpha_desc"
(Z→A),
"value_asc"
(menor total),
"value_desc"
(maior total),
"natural"
(ordem de aparição nos dados)
|
columnOverrides |
object |
{} |
Overrides de estilo por valor de coluna. Chave = valor de
columnField
(ou
totalLabel
). Valor =
TableColumnOverride
.
|
totalsFill |
string |
null |
Cor de fundo (hex) da linha de totais. Padrão: headerFill do elemento |
totalsTextColor |
string |
null |
Cor do texto (hex) da linha de totais. Padrão: headerTextColor do elemento |
totalsBold |
bool |
true |
Células da linha de totais em negrito |
totalsFontSize |
double |
null |
Tamanho de fonte da linha de totais. Padrão: columnFontSize do elemento |
cellConditionalStyles |
array |
[] |
Regras de estilo condicional aplicadas a
todas
as células de dados do pivot. Ver
CellStyleRule
. Tem menor prioridade que
columnOverrides[col].conditionalStyles
|
TableColumnOverride#
Overrides de estilo para uma coluna específica do pivot. Cada entrada em columnOverrides
é um objeto com as seguintes propriedades:
| Propriedade | Tipo | Padrão | Descrição |
|---|---|---|---|
width |
double |
null |
Largura da coluna em pt. Null = distribuição automática igual |
format |
string |
null |
Formato de exibição (ex: "#,##0.00", "currency:BRL") |
align |
string |
null |
Alinhamento: "left", "center", "right" |
bold |
bool |
false |
Células de dados em negrito |
headerColor |
string |
null |
Cor de fundo (hex) apenas do cabeçalho desta coluna |
conditionalStyles |
array |
[] |
Regras
CellStyleRule
para células desta coluna. Tem prioridade sobre
cellConditionalStyles
|
Exemplo:
"columnOverrides": {
"Total": { "bold": true, "headerColor": "1a237e", "align": "right" },
"Dez": { "headerColor": "b71c1c", "format": "#,##0.00" }
}
Estilos Condicionais de Célula#
Aplique estilos dinâmicos a células de tabela com base nos dados da linha usand conditionalStyles
na TableColumn (tabela regular) ou em TablePivotConfig.cellConditionalStyles
/ TableColumnOverride.conditionalStyles (tabela pivot).
A semântica é first-match-wins: a primeira regra cuja expressão when avaliar como truthy define o estilo; as demais são ignoradas.
CellStyleRule#
| Propriedade | Tipo | Padrão | Descrição |
|---|---|---|---|
when |
string |
— |
Obrigatório.
Expressão avaliada com o contexto
{...campos_da_linha, value: valor_bruto}
. Resultado truthy ativa o estilo
|
textColor |
string |
null |
Cor do texto (hex). Null = herda o padrão |
fill |
string |
null |
Cor de fundo da célula (hex). Null = herda o padrão |
bold |
bool |
null |
Negrito. Null = herda o padrão da coluna |
fontSize |
double |
null |
Tamanho de fonte em pt. Null = herda o padrão |
Valores truthy na expressão when: true (bool), número ≠ 0, string não vazia.
Contexto de avaliação: além dos campos da linha, a variável especial value
contém o valor bruto da célula antes da formatação.
"conditionalStyles": [
{ "when": "value < 0", "textColor": "e53935" },
{ "when": "value > 1000000", "fill": "e8f5e9", "bold": true },
{ "when": "tier == 'VIP'", "textColor": "1565c0", "bold": true },
{ "when": "value == 'negativo'","fill": "fff59d" }
]
Diferença entre Table e Detail Band#
- Detail Band: cada registro gera uma band posicionada (mais controle visual)
- Table: tabela pronta com header e linhas, posicionada como um bloco único
Use Table para tabelas de dados. Use Detail Band quando precisar de layout livre por registro.