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éthodeDescription
THPDFTable.Create(ADoc: THotPDF)Crée le tableau lié au document qui fournit les pages, les polices et les images
THPDFTable.DestroyLibère le tableau avec chaque ligne et cellule qu'il possède
THPDFTable.AddColumn(Width: Single): IntegerAjoute une colonne avec la largeur donnée dans les unités de page courantes et renvoie son index
THPDFTable.AddRow: THPDFTableRowAjoute 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.RenderMesure 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: THotPDFLe document lié transmis au constructeur
THPDFTable.ColCount: IntegerNombre de colonnes ajoutées avec THPDFTable.AddColumn
THPDFTable.RowCount: IntegerNombre de lignes ajoutées avec THPDFTable.AddRow
THPDFTable.Rows[Index: Integer]: THPDFTableRowAccède à une ligne par index
THPDFTable.X: Single et THPDFTable.Y: SingleOrigine du tableau sur la page dans les unités de page courantes
THPDFTable.HeaderBgColor: TColorCouleur de fond peinte derrière les lignes d'en-tête
THPDFTable.AlternatingBg: TColorCouleur de fond zébrée appliquée aux lignes non en-tête alternées
THPDFTable.BorderColor: TColor et THPDFTable.BorderWidth: SingleCouleur et largeur des lignes de grille utilisées pour les bordures de cellules
THPDFTable.DefaultFontName: AnsiString, THPDFTable.DefaultFontSize: Single, THPDFTable.DefaultAlign: THPDFCellAlignPolice et alignement de repli pour les cellules qui ne les surchargent pas
THPDFTable.Padding: SingleEspacement intérieur entre une bordure de cellule et son contenu
THPDFTable.BottomMargin: SingleEspace réservé en bas d'une page avant que la passe de rendu ne passe à une nouvelle page
THPDFTable.RepeatHeader: BooleanLorsque vrai, la bande d'en-tête est réémise en haut de chaque page de continuation
THPDFTable.TotalHeightRendered: SingleHauteur 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

MembreDescription
THPDFTableRow.Create(InitialColCount: Integer)Crée la ligne pré-remplie avec le nombre de cellules donné
THPDFTableRow.DestroyLibère la ligne et ses cellules
THPDFTableRow.AddCell: THPDFTableCellAjoute une cellule et la renvoie
THPDFTableRow.EnsureCells(Count: Integer): IntegerAgrandit la ligne jusqu'à au moins le nombre de cellules donné et renvoie le nouveau nombre
THPDFTableRow.Cells[Index: Integer]: THPDFTableCellPropriété de tableau par défaut accédant à une cellule par index
THPDFTableRow.Count: IntegerNombre de cellules actuellement détenues par la ligne
THPDFTableRow.IsHeader: BooleanMarque la ligne comme ligne d'en-tête peinte avec THPDFTable.HeaderBgColor et répétée lorsque THPDFTable.RepeatHeader est activé
THPDFTableRow.MinHeight: SingleBorne 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: WideStringTexte 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: THPDFCellVAlignAlignement horizontal et vertical du contenu dans la cellule
THPDFTableCell.ColSpan: Integer et THPDFTableCell.RowSpan: IntegerNombres de fusions horizontale et verticale, tous deux à 1 par défaut
THPDFTableCell.BgColor: TColor et THPDFTableCell.HasBgColor: BooleanSurcharge de la couleur de fond par cellule et son indicateur de présence
THPDFTableCell.TextColor: TColor et THPDFTableCell.HasTextColor: BooleanSurcharge de la couleur de texte par cellule et son indicateur de présence
THPDFTableCell.FontName: AnsiString, THPDFTableCell.FontSize: Single, THPDFTableCell.FontStyle: TFontStyles, THPDFTableCell.HasFont: BooleanSurcharge de police par cellule et son indicateur de présence
THPDFTableCell.WordWrap: BooleanRepli le texte long sur des lignes mesurées à l'intérieur de la cellule, activé par défaut
THPDFTableCell.ImageIndex: IntegerLorsque 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: SingleRatio 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: BooleanAchemine 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

Voir aussi