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
| Metodo | Descrizione |
|---|---|
THPDFTable.Create(ADoc: THotPDF) | Crea la tabella legata al documento che fornisce pagine, font e immagini |
THPDFTable.Destroy | Libera la tabella insieme a ogni riga e cella che possiede |
THPDFTable.AddColumn(Width: Single): Integer | Aggiunge in coda una colonna con la larghezza data nelle unità di pagina correnti e ne restituisce l'indice |
THPDFTable.AddRow: THPDFTableRow | Aggiunge 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.Render | Misura le altezze delle righe, disegna sfondi, bordi e contenuto delle celle, e continua su nuove pagine finché restano righe |
Proprietà
| Proprietà | Descrizione |
|---|---|
THPDFTable.Doc: THotPDF | Il documento legato fornito al costruttore |
THPDFTable.ColCount: Integer | Numero di colonne aggiunte con THPDFTable.AddColumn |
THPDFTable.RowCount: Integer | Numero di righe aggiunte con THPDFTable.AddRow |
THPDFTable.Rows[Index: Integer]: THPDFTableRow | Accede a una riga per indice |
THPDFTable.X: Single e THPDFTable.Y: Single | Origine della tabella sulla pagina nelle unità di pagina correnti |
THPDFTable.HeaderBgColor: TColor | Colore di sfondo dipinto dietro le righe di intestazione |
THPDFTable.AlternatingBg: TColor | Sfondo a righe zebra applicato alle righe alternate non di intestazione |
THPDFTable.BorderColor: TColor e THPDFTable.BorderWidth: Single | Colore e larghezza delle linee della griglia usati per i bordi delle celle |
THPDFTable.DefaultFontName: AnsiString, THPDFTable.DefaultFontSize: Single, THPDFTable.DefaultAlign: THPDFCellAlign | Font e allineamento di fallback per le celle che non li sovrascrivono |
THPDFTable.Padding: Single | Spaziatura interna tra il bordo di una cella e il suo contenuto |
THPDFTable.BottomMargin: Single | Spazio riservato in fondo a una pagina prima che il passaggio di rendering salti a una nuova pagina |
THPDFTable.RepeatHeader: Boolean | Quando è true la banda di intestazione viene riemessa in cima a ogni pagina di continuazione |
THPDFTable.TotalHeightRendered: Single | Altezza 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
| Membro | Descrizione |
|---|---|
THPDFTableRow.Create(InitialColCount: Integer) | Crea la riga pre-popolata con il numero dato di celle |
THPDFTableRow.Destroy | Libera la riga e le sue celle |
THPDFTableRow.AddCell: THPDFTableCell | Aggiunge in coda una cella e la restituisce |
THPDFTableRow.EnsureCells(Count: Integer): Integer | Cresce la riga fino ad almeno il numero dato di celle e restituisce il nuovo conteggio |
THPDFTableRow.Cells[Index: Integer]: THPDFTableCell | Proprietà array di default che accede a una cella per indice |
THPDFTableRow.Count: Integer | Numero di celle attualmente contenute nella riga |
THPDFTableRow.IsHeader: Boolean | Contrassegna la riga come riga di intestazione dipinta con THPDFTable.HeaderBgColor e ripetuta quando THPDFTable.RepeatHeader è abilitato |
THPDFTableRow.MinHeight: Single | Limite 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: WideString | Testo 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: THPDFCellVAlign | Allineamento orizzontale e verticale del contenuto dentro la cella |
THPDFTableCell.ColSpan: Integer e THPDFTableCell.RowSpan: Integer | Conteggi di unione orizzontale e verticale, entrambi con default 1 |
THPDFTableCell.BgColor: TColor e THPDFTableCell.HasBgColor: Boolean | Override del colore di sfondo per cella e il suo flag di presenza |
THPDFTableCell.TextColor: TColor e THPDFTableCell.HasTextColor: Boolean | Override del colore del testo per cella e il suo flag di presenza |
THPDFTableCell.FontName: AnsiString, THPDFTableCell.FontSize: Single, THPDFTableCell.FontStyle: TFontStyles, THPDFTableCell.HasFont: Boolean | Override del font per cella e il suo flag di presenza |
THPDFTableCell.WordWrap: Boolean | Manda a capo il testo lungo su righe misurate dentro la cella, abilitato per default |
THPDFTableCell.ImageIndex: Integer | Quando è zero o maggiore la cella mostra l'immagine registrata con quell'indice attraverso THotPDF.AddImage invece del testo, default -1 |
THPDFTableCell.ImageAspect: Single | Aspect 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: Boolean | Instrada 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