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étodoDescrição
THPDFTable.Create(ADoc: THotPDF)Cria a tabela vinculada ao documento que fornece páginas, fontes e imagens
THPDFTable.DestroyLibera a tabela junto com toda linha e célula que ela possui
THPDFTable.AddColumn(Width: Single): IntegerAnexa uma coluna com a largura dada nas unidades atuais da página e retorna o índice dela
THPDFTable.AddRow: THPDFTableRowAnexa 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.RenderMede as alturas das linhas, desenha fundos, bordas e conteúdo de células, e continua em novas páginas enquanto houver linhas

Propriedades

PropriedadeDescrição
THPDFTable.Doc: THotPDFO documento vinculado fornecido ao construtor
THPDFTable.ColCount: IntegerNúmero de colunas adicionadas com THPDFTable.AddColumn
THPDFTable.RowCount: IntegerNúmero de linhas adicionadas com THPDFTable.AddRow
THPDFTable.Rows[Index: Integer]: THPDFTableRowAcessa uma linha pelo índice
THPDFTable.X: Single e THPDFTable.Y: SingleOrigem da tabela na página, nas unidades atuais da página
THPDFTable.HeaderBgColor: TColorCor de fundo pintada atrás das linhas de cabeçalho
THPDFTable.AlternatingBg: TColorFundo de listra zebra aplicado às linhas alternadas que não são de cabeçalho
THPDFTable.BorderColor: TColor e THPDFTable.BorderWidth: SingleCor e largura das linhas de grade usadas nas bordas de células
THPDFTable.DefaultFontName: AnsiString, THPDFTable.DefaultFontSize: Single, THPDFTable.DefaultAlign: THPDFCellAlignFonte e alinhamento de fallback para células que não os sobrescrevem
THPDFTable.Padding: SingleEspaçamento interno entre a borda de uma célula e o conteúdo dela
THPDFTable.BottomMargin: SingleEspaço reservado na parte de baixo da página antes de a passada de renderização quebrar para uma nova página
THPDFTable.RepeatHeader: BooleanQuando true, a faixa de cabeçalho é emitida novamente no topo de cada página de continuação
THPDFTable.TotalHeightRendered: SingleAltura 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

MembroDescrição
THPDFTableRow.Create(InitialColCount: Integer)Cria a linha pré-preenchida com o número dado de células
THPDFTableRow.DestroyLibera a linha e as células dela
THPDFTableRow.AddCell: THPDFTableCellAnexa uma célula e a retorna
THPDFTableRow.EnsureCells(Count: Integer): IntegerFaz a linha crescer para pelo menos a contagem dada de células e retorna a nova contagem
THPDFTableRow.Cells[Index: Integer]: THPDFTableCellArray property padrão que acessa uma célula pelo índice
THPDFTableRow.Count: IntegerNúmero de células atualmente mantidas pela linha
THPDFTableRow.IsHeader: BooleanMarca a linha como linha de cabeçalho pintada com THPDFTable.HeaderBgColor e repetida quando o THPDFTable.RepeatHeader está habilitado
THPDFTableRow.MinHeight: SingleLimite 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

PropriedadeDescrição
THPDFTableCell.Text: WideStringTexto 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: THPDFCellVAlignAlinhamento horizontal e vertical do conteúdo dentro da célula
THPDFTableCell.ColSpan: Integer e THPDFTableCell.RowSpan: IntegerContagens de mesclagem horizontal e vertical, ambas com padrão 1
THPDFTableCell.BgColor: TColor e THPDFTableCell.HasBgColor: BooleanSobrescrita de cor de fundo por célula e a flag de presença dela
THPDFTableCell.TextColor: TColor e THPDFTableCell.HasTextColor: BooleanSobrescrita 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: BooleanSobrescrita de fonte por célula e a flag de presença dela
THPDFTableCell.WordWrap: BooleanQuebra texto longo em linhas medidas dentro da célula, habilitado por padrão
THPDFTableCell.ImageIndex: IntegerQuando 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: SingleAspect 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: BooleanRoteia 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

Veja também