Layout e renderização de tabelas THPDFTable
O THPDFTable é a engine leve de layout e renderização de tabelas introduzida no v2.429.0 e exposta pela unidade HPDFTable
Antes do v2.429.0, os produtores precisavam desenhar células à mão com Rectangle mais TextOut e coordenadas X de colunas fixadas no código, gerenciando alturas de linha, listras zebra e quebras de página manualmente; o THPDFTable dirige as primitivas de desenho existentes do THPDFPage para que as tabelas sejam renderizadas com alturas de linha medidas, células mescladas e continuação automática de quebra de página
Unidade
HPDFTable
Exemplo de uso
uses
HPDFTable;
var
Tbl: THPDFTable;
Row: THPDFTableRow;
begin
Tbl:= THPDFTable.Create(HPDF);
try
Tbl.AddColumn(80); Tbl.AddColumn(200); Tbl.AddColumn(120);
Tbl.SetBounds(50, 60);
Row:= Tbl.AddRow; Row.IsHeader:= True;
Row.Cells[0].Text:= 'No';
Row.Cells[1].Text:= 'Description';
Row:= Tbl.AddRow;
Row.Cells[0].ColSpan:= 2; // merged cell across columns 0..1
Row.Cells[0].Text:= 'merged header';
Tbl.Render;
finally
Tbl.Free;
end;
end;
THPDFTable
O THPDFTable é dono do layout de colunas, da coleção de linhas e da passada de renderização; ele desenha por meio do componente THotPDF passado ao THPDFTable.Create e usa apenas membros públicos de THPDFPage e THotPDF
Métodos
| Método | Descrição |
|---|---|
THPDFTable.Create(ADoc: THotPDF) | Cria a tabela vinculada ao documento que fornece páginas, fontes e imagens |
THPDFTable.Destroy | Libera a tabela junto com toda linha e célula que ela possui |
THPDFTable.AddColumn(Width: Single): Integer | Anexa uma coluna com a largura dada nas unidades atuais da página e retorna o índice dela |
THPDFTable.AddRow: THPDFTableRow | Anexa uma linha dimensionada para a contagem atual de colunas e a retorna |
THPDFTable.SetBounds(AX, AY: Single) | Posiciona a origem da tabela na página atual |
THPDFTable.Render | Mede as alturas das linhas, desenha fundos, bordas e conteúdo de células, e continua em novas páginas enquanto houver linhas |
Propriedades
| Propriedade | Descrição |
|---|---|
THPDFTable.Doc: THotPDF | O documento vinculado fornecido ao construtor |
THPDFTable.ColCount: Integer | Número de colunas adicionadas com THPDFTable.AddColumn |
THPDFTable.RowCount: Integer | Número de linhas adicionadas com THPDFTable.AddRow |
THPDFTable.Rows[Index: Integer]: THPDFTableRow | Acessa uma linha pelo índice |
THPDFTable.X: Single e THPDFTable.Y: Single | Origem da tabela na página, nas unidades atuais da página |
THPDFTable.HeaderBgColor: TColor | Cor de fundo pintada atrás das linhas de cabeçalho |
THPDFTable.AlternatingBg: TColor | Fundo de listra zebra aplicado às linhas alternadas que não são de cabeçalho |
THPDFTable.BorderColor: TColor e THPDFTable.BorderWidth: Single | Cor e largura das linhas de grade usadas nas bordas de células |
THPDFTable.DefaultFontName: AnsiString, THPDFTable.DefaultFontSize: Single, THPDFTable.DefaultAlign: THPDFCellAlign | Fonte e alinhamento de fallback para células que não os sobrescrevem |
THPDFTable.Padding: Single | Espaçamento interno entre a borda de uma célula e o conteúdo dela |
THPDFTable.BottomMargin: Single | Espaço reservado na parte de baixo da página antes de a passada de renderização quebrar para uma nova página |
THPDFTable.RepeatHeader: Boolean | Quando true, a faixa de cabeçalho é emitida novamente no topo de cada página de continuação |
THPDFTable.TotalHeightRendered: Single | Altura total consumida pela última passada de renderização em todas as páginas |
THPDFTableRow
O THPDFTableRow guarda as células de uma linha da tabela mais as flags no nível de linha usadas durante a medição e a renderização
| Membro | Descrição |
|---|---|
THPDFTableRow.Create(InitialColCount: Integer) | Cria a linha pré-preenchida com o número dado de células |
THPDFTableRow.Destroy | Libera a linha e as células dela |
THPDFTableRow.AddCell: THPDFTableCell | Anexa uma célula e a retorna |
THPDFTableRow.EnsureCells(Count: Integer): Integer | Faz a linha crescer para pelo menos a contagem dada de células e retorna a nova contagem |
THPDFTableRow.Cells[Index: Integer]: THPDFTableCell | Array property padrão que acessa uma célula pelo índice |
THPDFTableRow.Count: Integer | Número de células atualmente mantidas pela linha |
THPDFTableRow.IsHeader: Boolean | Marca a linha como linha de cabeçalho pintada com THPDFTable.HeaderBgColor e repetida quando o THPDFTable.RepeatHeader está habilitado |
THPDFTableRow.MinHeight: Single | Limite inferior aplicado à altura medida da linha |
THPDFTableCell
O THPDFTableCell carrega o conteúdo e as sobrescritas por célula aplicadas sobre os padrões da tabela
| Propriedade | Descrição |
|---|---|
THPDFTableCell.Text: WideString | Texto da célula; renderizado por meio de THPDFPage.TextOutHTML quando THPDFTableCell.IsHTML é true, de modo que a marcação inline de negrito, cor, links e sub-sup seja respeitada |
THPDFTableCell.Align: THPDFCellAlign e THPDFTableCell.VAlign: THPDFCellVAlign | Alinhamento horizontal e vertical do conteúdo dentro da célula |
THPDFTableCell.ColSpan: Integer e THPDFTableCell.RowSpan: Integer | Contagens de mesclagem horizontal e vertical, ambas com padrão 1 |
THPDFTableCell.BgColor: TColor e THPDFTableCell.HasBgColor: Boolean | Sobrescrita de cor de fundo por célula e a flag de presença dela |
THPDFTableCell.TextColor: TColor e THPDFTableCell.HasTextColor: Boolean | Sobrescrita de cor de texto por célula e a flag de presença dela |
THPDFTableCell.FontName: AnsiString, THPDFTableCell.FontSize: Single, THPDFTableCell.FontStyle: TFontStyles, THPDFTableCell.HasFont: Boolean | Sobrescrita de fonte por célula e a flag de presença dela |
THPDFTableCell.WordWrap: Boolean | Quebra texto longo em linhas medidas dentro da célula, habilitado por padrão |
THPDFTableCell.ImageIndex: Integer | Quando zero ou maior, a célula mostra a imagem registrada com esse índice por meio de THotPDF.AddImage em vez de texto, padrão -1 |
THPDFTableCell.ImageAspect: Single | Aspect ratio de exibição para uma célula de imagem; a imagem é escalada para a largura da célula e a altura dela deriva desse ratio, padrão 1.0 |
THPDFTableCell.IsHTML: Boolean | Roteia o THPDFTableCell.Text pelo THPDFPage.TextOutHTML para que a marcação inline seja renderizada |
Enums de alinhamento
O THPDFCellAlign = (caLeft, caCenter, caRight) seleciona o alinhamento horizontal da célula e o THPDFCellVAlign = (cvaTop, cvaMiddle, cvaBottom) seleciona o alinhamento vertical da célula
Layout e comportamento de quebra de página
As alturas das linhas são medidas a partir do conteúdo das células respeitando o word wrap e o THPDFTableRow.MinHeight, as células de span são posicionadas em um grid interno para que o THPDFTableCell.ColSpan e o THPDFTableCell.RowSpan mesclem corretamente entre linhas, e a passada de renderização quebra para uma nova página quando a próxima linha não cabe acima do THPDFTable.BottomMargin
Quando o THPDFTable.RepeatHeader é true, a faixa de cabeçalho é emitida novamente no topo de cada página de continuação antes que mais linhas sejam desenhadas
As células de imagem introduzidas no v2.432.0 referenciam por índice uma imagem registrada por meio do THotPDF.AddImage, escalam para a largura da célula e derivam a altura delas do THPDFTableCell.ImageAspect, de modo que a figura mantenha o aspect ratio da origem