Mise en page et rendu de tableaux THPDFTable
THPDFTable est le moteur léger de mise en page et de rendu de tableaux introduit en v2.429.0 et exposé par l'unité HPDFTable
Avant la v2.429.0, les producteurs devaient dessiner les cellules à la main avec Rectangle et TextOut et des coordonnées X de colonnes codées en dur, en gérant manuellement les hauteurs de lignes, le zébrage et les sauts de page ; THPDFTable pilote les primitives de dessin THPDFPage existantes si bien que les tableaux se rendent avec des hauteurs de lignes mesurées, des cellules fusionnées et une continuation automatique sur les sauts de page
Unité
HPDFTable
Exemple d'utilisation
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 possède la mise en page des colonnes, la collection de lignes et la passe de rendu ; il dessine via le composant THotPDF transmis à THPDFTable.Create et n'utilise que des membres publics de THPDFPage et THotPDF
Méthodes
| Méthode | Description |
|---|---|
THPDFTable.Create(ADoc: THotPDF) | Crée le tableau lié au document qui fournit les pages, les polices et les images |
THPDFTable.Destroy | Libère le tableau avec chaque ligne et cellule qu'il possède |
THPDFTable.AddColumn(Width: Single): Integer | Ajoute une colonne avec la largeur donnée dans les unités de page courantes et renvoie son index |
THPDFTable.AddRow: THPDFTableRow | Ajoute une ligne dimensionnée au nombre de colonnes courant et la renvoie |
THPDFTable.SetBounds(AX, AY: Single) | Positionne l'origine du tableau sur la page courante |
THPDFTable.Render | Mesure les hauteurs de lignes, dessine les fonds, les bordures et le contenu des cellules, et continue sur de nouvelles pages tant qu'il reste des lignes |
Propriétés
| Propriété | Description |
|---|---|
THPDFTable.Doc: THotPDF | Le document lié transmis au constructeur |
THPDFTable.ColCount: Integer | Nombre de colonnes ajoutées avec THPDFTable.AddColumn |
THPDFTable.RowCount: Integer | Nombre de lignes ajoutées avec THPDFTable.AddRow |
THPDFTable.Rows[Index: Integer]: THPDFTableRow | Accède à une ligne par index |
THPDFTable.X: Single et THPDFTable.Y: Single | Origine du tableau sur la page dans les unités de page courantes |
THPDFTable.HeaderBgColor: TColor | Couleur de fond peinte derrière les lignes d'en-tête |
THPDFTable.AlternatingBg: TColor | Couleur de fond zébrée appliquée aux lignes non en-tête alternées |
THPDFTable.BorderColor: TColor et THPDFTable.BorderWidth: Single | Couleur et largeur des lignes de grille utilisées pour les bordures de cellules |
THPDFTable.DefaultFontName: AnsiString, THPDFTable.DefaultFontSize: Single, THPDFTable.DefaultAlign: THPDFCellAlign | Police et alignement de repli pour les cellules qui ne les surchargent pas |
THPDFTable.Padding: Single | Espacement intérieur entre une bordure de cellule et son contenu |
THPDFTable.BottomMargin: Single | Espace réservé en bas d'une page avant que la passe de rendu ne passe à une nouvelle page |
THPDFTable.RepeatHeader: Boolean | Lorsque vrai, la bande d'en-tête est réémise en haut de chaque page de continuation |
THPDFTable.TotalHeightRendered: Single | Hauteur totale consommée par la dernière passe de rendu sur toutes les pages |
THPDFTableRow
THPDFTableRow contient les cellules d'une ligne de tableau plus les indicateurs de niveau ligne utilisés pendant la mesure et le rendu
| Membre | Description |
|---|---|
THPDFTableRow.Create(InitialColCount: Integer) | Crée la ligne pré-remplie avec le nombre de cellules donné |
THPDFTableRow.Destroy | Libère la ligne et ses cellules |
THPDFTableRow.AddCell: THPDFTableCell | Ajoute une cellule et la renvoie |
THPDFTableRow.EnsureCells(Count: Integer): Integer | Agrandit la ligne jusqu'à au moins le nombre de cellules donné et renvoie le nouveau nombre |
THPDFTableRow.Cells[Index: Integer]: THPDFTableCell | Propriété de tableau par défaut accédant à une cellule par index |
THPDFTableRow.Count: Integer | Nombre de cellules actuellement détenues par la ligne |
THPDFTableRow.IsHeader: Boolean | Marque la ligne comme ligne d'en-tête peinte avec THPDFTable.HeaderBgColor et répétée lorsque THPDFTable.RepeatHeader est activé |
THPDFTableRow.MinHeight: Single | Borne inférieure appliquée à la hauteur de ligne mesurée |
THPDFTableCell
THPDFTableCell porte le contenu et les surcharges par cellule appliquées par-dessus les valeurs par défaut du tableau
| Propriété | Description |
|---|---|
THPDFTableCell.Text: WideString | Texte de la cellule ; rendu via THPDFPage.TextOutHTML lorsque THPDFTableCell.IsHTML est vrai, afin que le balisage en ligne pour le gras, la couleur, les liens et sub-sup soit honoré |
THPDFTableCell.Align: THPDFCellAlign et THPDFTableCell.VAlign: THPDFCellVAlign | Alignement horizontal et vertical du contenu dans la cellule |
THPDFTableCell.ColSpan: Integer et THPDFTableCell.RowSpan: Integer | Nombres de fusions horizontale et verticale, tous deux à 1 par défaut |
THPDFTableCell.BgColor: TColor et THPDFTableCell.HasBgColor: Boolean | Surcharge de la couleur de fond par cellule et son indicateur de présence |
THPDFTableCell.TextColor: TColor et THPDFTableCell.HasTextColor: Boolean | Surcharge de la couleur de texte par cellule et son indicateur de présence |
THPDFTableCell.FontName: AnsiString, THPDFTableCell.FontSize: Single, THPDFTableCell.FontStyle: TFontStyles, THPDFTableCell.HasFont: Boolean | Surcharge de police par cellule et son indicateur de présence |
THPDFTableCell.WordWrap: Boolean | Repli le texte long sur des lignes mesurées à l'intérieur de la cellule, activé par défaut |
THPDFTableCell.ImageIndex: Integer | Lorsque zéro ou plus, la cellule affiche l'image enregistrée avec cet index via THotPDF.AddImage au lieu du texte, -1 par défaut |
THPDFTableCell.ImageAspect: Single | Ratio d'affichage d'une cellule image ; l'image est mise à l'échelle de la largeur de la cellule et sa hauteur dérive de ce ratio, 1.0 par défaut |
THPDFTableCell.IsHTML: Boolean | Achemine THPDFTableCell.Text via THPDFPage.TextOutHTML afin que le balisage en ligne soit rendu |
Énumérations d'alignement
THPDFCellAlign = (caLeft, caCenter, caRight) sélectionne l'alignement horizontal des cellules et THPDFCellVAlign = (cvaTop, cvaMiddle, cvaBottom) sélectionne l'alignement vertical des cellules
Mise en page et comportement des sauts de page
Les hauteurs de lignes sont mesurées depuis le contenu des cellules en honorant le repli de texte et THPDFTableRow.MinHeight, les cellules étendues sont placées sur une grille interne afin que THPDFTableCell.ColSpan et THPDFTableCell.RowSpan fusionnent correctement à travers les lignes, et la passe de rendu passe à une nouvelle page lorsque la ligne suivante ne tient pas au-dessus de THPDFTable.BottomMargin
Lorsque THPDFTable.RepeatHeader est vrai, la bande d'en-tête est réémise en haut de chaque page de continuation avant que d'autres lignes ne soient dessinées
Les cellules image introduites en v2.432.0 référencent par index une image enregistrée via THotPDF.AddImage, se mettent à l'échelle de la largeur de la cellule et dérivent leur hauteur de THPDFTableCell.ImageAspect afin que l'image conserve son ratio d'origine