Logosulfite.app
rafagazani/sulfite 999999

Table

Elemento de tabela com colunas, bindings e estilos

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#

PropriedadeTipoPadrãoDescrição
widthdoubleLargura 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#

PropriedadeTipoPadrãoDescrição
idstringIdentificador
headerstringTexto do cabeçalho
bindingstringCampo do registro
widthdoubleLargura 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 header ou binding
  • Seções colápsáveis por coluna — padrão expandido
  • Aplicar estilo a todas — propaga fontSize, align e wrapText de 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: 0 na band que contém a tabela pivot para que o PDF calcule a altura automaticamente.

TablePivotConfig#

PropriedadeTipoPadrãoDescriçã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:

PropriedadeTipoPadrãoDescriçã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#

PropriedadeTipoPadrãoDescriçã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.