THPDFTable-Tabellenlayout und -Rendering

THPDFTable ist die schlanke Tabellenlayout- und Rendering-Engine, die in v2.429.0 eingeführt wurde und über die Unit HPDFTable bereitgestellt wird

Vor v2.429.0 mussten Erzeuger Zellen von Hand mit Rectangle plus TextOut und fest einprogrammierten Spalten-X-Koordinaten zeichnen und Zeilenhöhen, Zebra-Streifen und Seitenumbrüche selbst verwalten; THPDFTable steuert die vorhandenen Zeichenprimitive von THPDFPage, sodass Tabellen mit gemessenen Zeilenhöhen, verbundenen Zellen und automatischer Seitenumbruch-Fortsetzung gerendert werden

Unit

HPDFTable

Verwendungsbeispiel

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 besitzt das Spaltenlayout, die Zeilensammlung und den Render-Durchlauf; es zeichnet über die an THPDFTable.Create übergebene THotPDF-Komponente und verwendet ausschließlich öffentliche Member von THPDFPage und THotPDF

Methoden

MethodeBeschreibung
THPDFTable.Create(ADoc: THotPDF)Erstellt die Tabelle, die an das Dokument gebunden ist, das Seiten, Schriftarten und Bilder liefert
THPDFTable.DestroyGibt die Tabelle mitsamt allen Zeilen und Zellen frei, die sie besitzt
THPDFTable.AddColumn(Width: Single): IntegerHängt eine Spalte mit der angegebenen Breite in aktuellen Seiteneinheiten an und liefert ihren Index
THPDFTable.AddRow: THPDFTableRowHängt eine an die aktuelle Spaltenzahl angepasste Zeile an und liefert sie zurück
THPDFTable.SetBounds(AX, AY: Single)Positioniert den Tabellenursprung auf der aktuellen Seite
THPDFTable.RenderMisst Zeilenhöhen, zeichnet Hintergründe, Rahmen und Zellinhalte und setzt auf neuen Seiten fort, solange Zeilen übrig bleiben

Eigenschaften

EigenschaftBeschreibung
THPDFTable.Doc: THotPDFDas an den Konstruktor übergebene gebundene Dokument
THPDFTable.ColCount: IntegerAnzahl der mit THPDFTable.AddColumn hinzugefügten Spalten
THPDFTable.RowCount: IntegerAnzahl der mit THPDFTable.AddRow hinzugefügten Zeilen
THPDFTable.Rows[Index: Integer]: THPDFTableRowGreift über einen Index auf eine Zeile zu
THPDFTable.X: Single und THPDFTable.Y: SingleTabellenursprung auf der Seite in aktuellen Seiteneinheiten
THPDFTable.HeaderBgColor: TColorHintergrundfarbe hinter Kopfzeilen
THPDFTable.AlternatingBg: TColorZebra-Streifen-Hintergrund für abwechselnde Nicht-Kopfzeilen
THPDFTable.BorderColor: TColor und THPDFTable.BorderWidth: SingleFarbe und Breite der Gitternetzlinien für Zellrahmen
THPDFTable.DefaultFontName: AnsiString, THPDFTable.DefaultFontSize: Single, THPDFTable.DefaultAlign: THPDFCellAlignAusweichschriftart und -ausrichtung für Zellen, die sie nicht selbst überschreiben
THPDFTable.Padding: SingleInnerer Abstand zwischen Zellrahmen und Zellinhalt
THPDFTable.BottomMargin: SingleRaum, der am unteren Seitenrand reserviert wird, bevor der Render-Durchlauf auf eine neue Seite umbricht
THPDFTable.RepeatHeader: BooleanBei true wird der Kopfzeilenblock am Anfang jeder Fortsetzungsseite erneut ausgegeben
THPDFTable.TotalHeightRendered: SingleGesamthöhe, die der letzte Render-Durchlauf über alle Seiten verbraucht hat

THPDFTableRow

THPDFTableRow hält die Zellen einer Tabellenzeile plus die zeilenbezogenen Flags, die während Messung und Rendering verwendet werden

ElementBeschreibung
THPDFTableRow.Create(InitialColCount: Integer)Erstellt die Zeile mit der angegebenen Zellanzahl vorbefüllt
THPDFTableRow.DestroyGibt die Zeile und ihre Zellen frei
THPDFTableRow.AddCell: THPDFTableCellHängt eine Zelle an und liefert sie zurück
THPDFTableRow.EnsureCells(Count: Integer): IntegerErweitert die Zeile auf mindestens die angegebene Zellanzahl und liefert die neue Anzahl
THPDFTableRow.Cells[Index: Integer]: THPDFTableCellStandard-Array-Eigenschaft, die über einen Index auf eine Zelle zugreift
THPDFTableRow.Count: IntegerAnzahl der Zellen, die die Zeile aktuell hält
THPDFTableRow.IsHeader: BooleanMarkiert die Zeile als Kopfzeile, die mit THPDFTable.HeaderBgColor gemalt und wiederholt wird, wenn THPDFTable.RepeatHeader aktiviert ist
THPDFTableRow.MinHeight: SingleUntergrenze für die gemessene Zeilenhöhe

THPDFTableCell

THPDFTableCell trägt den Inhalt und die zellbezogenen Überschreibungen, die auf den Tabellen-Standardwerten aufsetzen

EigenschaftBeschreibung
THPDFTableCell.Text: WideStringZelltext; wird über THPDFPage.TextOutHTML gerendert, wenn THPDFTableCell.IsHTML true ist, sodass Inline-Markup für Fettdruck, Farbe, Links und Sub-/Superscript berücksichtigt wird
THPDFTableCell.Align: THPDFCellAlign und THPDFTableCell.VAlign: THPDFCellVAlignHorizontale und vertikale Ausrichtung des Inhalts innerhalb der Zelle
THPDFTableCell.ColSpan: Integer und THPDFTableCell.RowSpan: IntegerHorizontale und vertikale Verbindungszahlen, beide standardmäßig 1
THPDFTableCell.BgColor: TColor und THPDFTableCell.HasBgColor: BooleanÜberschreibung der Hintergrundfarbe je Zelle und ihr Vorhandenheits-Flag
THPDFTableCell.TextColor: TColor und THPDFTableCell.HasTextColor: BooleanÜberschreibung der Textfarbe je Zelle und ihr Vorhandenheits-Flag
THPDFTableCell.FontName: AnsiString, THPDFTableCell.FontSize: Single, THPDFTableCell.FontStyle: TFontStyles, THPDFTableCell.HasFont: BooleanÜberschreibung der Schriftart je Zelle und ihr Vorhandenheits-Flag
THPDFTableCell.WordWrap: BooleanBricht langen Text über gemessene Zeilen innerhalb der Zelle um, standardmäßig aktiviert
THPDFTableCell.ImageIndex: IntegerBei null oder größer zeigt die Zelle statt Text das über THotPDF.AddImage mit diesem Index registrierte Bild; Standard ist -1
THPDFTableCell.ImageAspect: SingleAnzeigeseitenverhältnis für eine Bildzelle; das Bild wird auf die Zellbreite skaliert und seine Höhe leitet sich aus diesem Verhältnis ab, Standard 1.0
THPDFTableCell.IsHTML: BooleanLeitet THPDFTableCell.Text durch THPDFPage.TextOutHTML, sodass Inline-Markup gerendert wird

Ausrichtungs-Enums

THPDFCellAlign = (caLeft, caCenter, caRight) wählt die horizontale Zellausrichtung und THPDFCellVAlign = (cvaTop, cvaMiddle, cvaBottom) die vertikale Zellausrichtung

Layout- und Seitenumbruch-Verhalten

Zeilenhöhen werden aus dem Zellinhalt mit Word-Wrap und beachtetem THPDFTableRow.MinHeight gemessen, Zellen mit Spannen liegen auf einem internen Raster, sodass THPDFTableCell.ColSpan und THPDFTableCell.RowSpan zeilenübergreifend korrekt verbinden, und der Render-Durchlauf bricht auf eine neue Seite um, wenn die nächste Zeile nicht mehr über THPDFTable.BottomMargin hinaus passt

Wenn THPDFTable.RepeatHeader true ist, wird der Kopfzeilenblock am Anfang jeder Fortsetzungsseite erneut ausgegeben, bevor weitere Zeilen gezeichnet werden

Bildzellen, die in v2.432.0 eingeführt wurden, referenzieren ein per Index über THotPDF.AddImage registriertes Bild, skalieren es auf die Zellbreite und leiten ihre Höhe aus THPDFTableCell.ImageAspect ab, sodass das Bild sein Ursprungsseitenverhältnis behält

Siehe auch