Layout e rendering delle tabelle con THPDFTable

THPDFTable è il motore leggero di layout e rendering delle tabelle introdotto nella v2.429.0 ed esposto dall'unit HPDFTable

Prima della v2.429.0 chi generava PDF doveva disegnare le celle a mano con Rectangle più TextOut e coordinate X delle colonne cablate nel codice, gestendo a mano altezze di riga, righe zebra e interruzioni di pagina; THPDFTable pilota le primitive di disegno esistenti di THPDFPage così le tabelle vengono renderizzate con altezze di riga misurate, celle unite e continuazione automatica a nuova pagina

Unit

HPDFTable

Esempio d'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

THPDFTable possiede il layout delle colonne, la collezione di righe e il passaggio di rendering; disegna attraverso il componente THotPDF passato a THPDFTable.Create e usa solo membri pubblici di THPDFPage e THotPDF

Metodi

MetodoDescrizione
THPDFTable.Create(ADoc: THotPDF)Crea la tabella legata al documento che fornisce pagine, font e immagini
THPDFTable.DestroyLibera la tabella insieme a ogni riga e cella che possiede
THPDFTable.AddColumn(Width: Single): IntegerAggiunge in coda una colonna con la larghezza data nelle unità di pagina correnti e ne restituisce l'indice
THPDFTable.AddRow: THPDFTableRowAggiunge in coda una riga dimensionata sul numero corrente di colonne e la restituisce
THPDFTable.SetBounds(AX, AY: Single)Posiziona l'origine della tabella sulla pagina corrente
THPDFTable.RenderMisura le altezze delle righe, disegna sfondi, bordi e contenuto delle celle, e continua su nuove pagine finché restano righe

Proprietà

ProprietàDescrizione
THPDFTable.Doc: THotPDFIl documento legato fornito al costruttore
THPDFTable.ColCount: IntegerNumero di colonne aggiunte con THPDFTable.AddColumn
THPDFTable.RowCount: IntegerNumero di righe aggiunte con THPDFTable.AddRow
THPDFTable.Rows[Index: Integer]: THPDFTableRowAccede a una riga per indice
THPDFTable.X: Single e THPDFTable.Y: SingleOrigine della tabella sulla pagina nelle unità di pagina correnti
THPDFTable.HeaderBgColor: TColorColore di sfondo dipinto dietro le righe di intestazione
THPDFTable.AlternatingBg: TColorSfondo a righe zebra applicato alle righe alternate non di intestazione
THPDFTable.BorderColor: TColor e THPDFTable.BorderWidth: SingleColore e larghezza delle linee della griglia usati per i bordi delle celle
THPDFTable.DefaultFontName: AnsiString, THPDFTable.DefaultFontSize: Single, THPDFTable.DefaultAlign: THPDFCellAlignFont e allineamento di fallback per le celle che non li sovrascrivono
THPDFTable.Padding: SingleSpaziatura interna tra il bordo di una cella e il suo contenuto
THPDFTable.BottomMargin: SingleSpazio riservato in fondo a una pagina prima che il passaggio di rendering salti a una nuova pagina
THPDFTable.RepeatHeader: BooleanQuando è true la banda di intestazione viene riemessa in cima a ogni pagina di continuazione
THPDFTable.TotalHeightRendered: SingleAltezza totale consumata dall'ultimo passaggio di rendering su tutte le pagine

THPDFTableRow

THPDFTableRow contiene le celle di una riga della tabella più i flag a livello di riga usati durante misura e rendering

MembroDescrizione
THPDFTableRow.Create(InitialColCount: Integer)Crea la riga pre-popolata con il numero dato di celle
THPDFTableRow.DestroyLibera la riga e le sue celle
THPDFTableRow.AddCell: THPDFTableCellAggiunge in coda una cella e la restituisce
THPDFTableRow.EnsureCells(Count: Integer): IntegerCresce la riga fino ad almeno il numero dato di celle e restituisce il nuovo conteggio
THPDFTableRow.Cells[Index: Integer]: THPDFTableCellProprietà array di default che accede a una cella per indice
THPDFTableRow.Count: IntegerNumero di celle attualmente contenute nella riga
THPDFTableRow.IsHeader: BooleanContrassegna la riga come riga di intestazione dipinta con THPDFTable.HeaderBgColor e ripetuta quando THPDFTable.RepeatHeader è abilitato
THPDFTableRow.MinHeight: SingleLimite inferiore applicato all'altezza misurata della riga

THPDFTableCell

THPDFTableCell porta il contenuto e le override per cella applicate sopra i default della tabella

ProprietàDescrizione
THPDFTableCell.Text: WideStringTesto della cella; renderizzato attraverso THPDFPage.TextOutHTML quando THPDFTableCell.IsHTML è true così il markup inline per grassetto, colore, link e sub-sup viene rispettato
THPDFTableCell.Align: THPDFCellAlign e THPDFTableCell.VAlign: THPDFCellVAlignAllineamento orizzontale e verticale del contenuto dentro la cella
THPDFTableCell.ColSpan: Integer e THPDFTableCell.RowSpan: IntegerConteggi di unione orizzontale e verticale, entrambi con default 1
THPDFTableCell.BgColor: TColor e THPDFTableCell.HasBgColor: BooleanOverride del colore di sfondo per cella e il suo flag di presenza
THPDFTableCell.TextColor: TColor e THPDFTableCell.HasTextColor: BooleanOverride del colore del testo per cella e il suo flag di presenza
THPDFTableCell.FontName: AnsiString, THPDFTableCell.FontSize: Single, THPDFTableCell.FontStyle: TFontStyles, THPDFTableCell.HasFont: BooleanOverride del font per cella e il suo flag di presenza
THPDFTableCell.WordWrap: BooleanManda a capo il testo lungo su righe misurate dentro la cella, abilitato per default
THPDFTableCell.ImageIndex: IntegerQuando è zero o maggiore la cella mostra l'immagine registrata con quell'indice attraverso THotPDF.AddImage invece del testo, default -1
THPDFTableCell.ImageAspect: SingleAspect ratio di visualizzazione per una cella immagine; l'immagine viene scalata alla larghezza della cella e la sua altezza deriva da questo rapporto, default 1.0
THPDFTableCell.IsHTML: BooleanInstrada THPDFTableCell.Text attraverso THPDFPage.TextOutHTML così il markup inline viene renderizzato

Enum di allineamento

THPDFCellAlign = (caLeft, caCenter, caRight) seleziona l'allineamento orizzontale della cella e THPDFCellVAlign = (cvaTop, cvaMiddle, cvaBottom) seleziona quello verticale

Layout e comportamento delle interruzioni di pagina

Le altezze delle righe sono misurate dal contenuto delle celle rispettando il word wrap e THPDFTableRow.MinHeight, le celle estese vengono piazzate su una griglia interna così THPDFTableCell.ColSpan e THPDFTableCell.RowSpan si uniscono correttamente attraverso le righe, e il passaggio di rendering salta a una nuova pagina quando la riga successiva non entra sopra THPDFTable.BottomMargin

Quando THPDFTable.RepeatHeader è true la banda di intestazione viene riemessa in cima a ogni pagina di continuazione prima di disegnare altre righe

Le celle immagine introdotte nella v2.432.0 referenziano per indice un'immagine registrata attraverso THotPDF.AddImage, si scalano alla larghezza della cella e derivano la loro altezza da THPDFTableCell.ImageAspect così l'immagine mantiene il suo aspect ratio di origine

Vedi anche