Tabelas — cabeçalho, valor e rodapé (totais)
Além das colunas normais, uma tabela pode ter uma linha de totais
(footer) — uma célula por coluna, cada uma um template de verdade
(texto fixo e/ou {token}/{SUM(...)}). Desenha só uma vez, na última
fatia, mesmo se a tabela paginar (nunca repete feito o cabeçalho).
Estilo, em três níveis
Cor de fundo/texto e tamanho de fonte são configuráveis do mais genérico ao mais específico:
- Cabeçalho inteiro —
headBackgroundColor/headTextColor/headFontSize - Linha de valor inteira (todas as linhas de dado) —
bodyBackgroundColor/bodyTextColor/bodyFontSize - Rodapé inteiro —
footerBackgroundColor/footerTextColor/footerFontSize
...e por coluna individual via columnStyles (cabeçalho e valor
separados, sobrescreve só aquela coluna). Sem nada definido, cai no
azul/branco/9pt de sempre — templates antigos não mudam de aparência.
Renomear uma coluna: clique no botão de lápis no chip dela na lista
"Colunas atuais da tabela", ou dê duplo clique no nome. O lápis é o caminho
acessível — um <button> que o Tab alcança e o leitor de tela anuncia; o duplo
clique é atalho de mouse pra mesma coisa. Nos dois casos o input abre com o
texto selecionado, então digitar substitui o nome em vez de anexar a ele. Só o título muda — o token, o estilo por coluna e a largura ficam,
porque a referência de dado mora na fórmula da coluna e não no rótulo dela. O
antigo campo "Colunas (cabeçalho, vírgula)" saiu: ele substituía a lista de
cabeçalho inteira a cada tecla, e era isso que fazia um rename ser
indistinguível de apagar uma coluna e inserir outra.
A lista "Colunas atuais da tabela" no painel deixa arrastar pra
reordenar (desloca head/content/footer/columnStyles juntos,
pelo índice) e tem um botão "+" pra adicionar coluna de uma fonte de
dados conhecida.
Largura de coluna
columnWidths (mm, uma entrada por coluna, esparso — mesma convenção
de columnStyles) define uma largura explícita pra uma coluna, seja
pelo input numérico no painel de estilo daquela coluna, seja arrastando
o divisor entre dois cabeçalhos de coluna direto no canvas. Coluna sem
largura própria divide, em partes iguais, o que sobra da largura total
da tabela — com columnWidths totalmente ausente, toda coluna ainda
divide a largura igualmente, exatamente como antes disso existir.
Alinhamento de texto
Cada bloco tem seu próprio alinhamento horizontal/vertical: headAlign/
bodyAlign/footerAlign ("left" default, "center", "right") e
headVerticalAlign/bodyVerticalAlign/footerVerticalAlign ("top",
"middle" default, "bottom").
Arredondamento de canto
headBorderRadius/bodyBorderRadius/footerBorderRadius recebem cada
um um TableCornerRadii ({ topLeft?, topRight?, bottomLeft?, bottomRight? }, mm) — ausente/0 continua reto, como sempre. Só os
cantos que tocam a borda externa da tabela fazem sentido por bloco, e o
painel só mostra esses: cabeçalho arredonda topLeft/topRight (o
corpo sempre desenha logo abaixo dele), rodapé arredonda bottomLeft/
bottomRight, e o corpo também arredonda bottomLeft/bottomRight,
mas só enquanto não há rodapé — com a linha de totais ligada, é o
rodapé que fecha os cantos de baixo.
Linha zebrada
bodyBandColor define o fundo das linhas de dado de índice ÍMPAR
(0-based), deixando as linhas pares com bodyBackgroundColor de sempre
(branco/transparente por padrão) — uma tabela zebrada clássica. Ausente
= sem zebra, toda linha usa bodyBackgroundColor.
Paletas prontas de estilo
O seletor Paleta na aba Estilo aplica um esquema de cor inteiro num
clique só — agrupado Claro/Médio/Escuro, cada um com uma opção azul/
verde/laranja/cinza (e roxo, só claro/médio), mais um default — mesma
ideia do "Formatar como Tabela" do Excel. Escolher um preenche
headBackgroundColor/headTextColor/bodyBandColor (continua editável
à mão depois); colorPalette só guarda qual preset mostrar selecionado
da próxima vez que o seletor abrir — não é lido pelo generatePdf, só
os campos de cor de verdade são.
Paginação
Se uma tabela (ou seção repetida) do corpo tiver mais linhas/itens do
que cabem numa página, o generatePdf quebra em várias páginas
automaticamente. Todo item do corpo — tabela, seção, texto, imagem
— é processado numa sequência só, ordenada por Y: quando um
termina, o próximo continua logo abaixo (mesma página ou nova, o que
couber), preservando o espaçamento desenhado no editor mesmo que algo
antes tenha crescido ou mudado de página.
No editor de cada tabela dá pra desligar "Repetir cabeçalho da tabela nas próximas páginas" (default ligado).
Cabeçalho, rodapé e margens
Template.headerHeight/footerHeight/marginLeft/marginRight (mm)
são faixas que se repetem em toda página do PDF gerado. Não existe
campo de "zona" no schema — um campo cai automaticamente no cabeçalho/
rodapé/margem quando sua posição (x/y) fica contida ali.
Dentro de um campo de texto que caia nessas faixas, os tokens especiais
{pageNumber} e {pageCount} funcionam direto no conteúdo e são
resolvidos de novo em cada página — útil pra "Página 1 de 3" no
rodapé.