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
| Methode | Beschreibung |
|---|---|
THPDFTable.Create(ADoc: THotPDF) | Erstellt die Tabelle, die an das Dokument gebunden ist, das Seiten, Schriftarten und Bilder liefert |
THPDFTable.Destroy | Gibt die Tabelle mitsamt allen Zeilen und Zellen frei, die sie besitzt |
THPDFTable.AddColumn(Width: Single): Integer | Hängt eine Spalte mit der angegebenen Breite in aktuellen Seiteneinheiten an und liefert ihren Index |
THPDFTable.AddRow: THPDFTableRow | Hä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.Render | Misst Zeilenhöhen, zeichnet Hintergründe, Rahmen und Zellinhalte und setzt auf neuen Seiten fort, solange Zeilen übrig bleiben |
Eigenschaften
| Eigenschaft | Beschreibung |
|---|---|
THPDFTable.Doc: THotPDF | Das an den Konstruktor übergebene gebundene Dokument |
THPDFTable.ColCount: Integer | Anzahl der mit THPDFTable.AddColumn hinzugefügten Spalten |
THPDFTable.RowCount: Integer | Anzahl der mit THPDFTable.AddRow hinzugefügten Zeilen |
THPDFTable.Rows[Index: Integer]: THPDFTableRow | Greift über einen Index auf eine Zeile zu |
THPDFTable.X: Single und THPDFTable.Y: Single | Tabellenursprung auf der Seite in aktuellen Seiteneinheiten |
THPDFTable.HeaderBgColor: TColor | Hintergrundfarbe hinter Kopfzeilen |
THPDFTable.AlternatingBg: TColor | Zebra-Streifen-Hintergrund für abwechselnde Nicht-Kopfzeilen |
THPDFTable.BorderColor: TColor und THPDFTable.BorderWidth: Single | Farbe und Breite der Gitternetzlinien für Zellrahmen |
THPDFTable.DefaultFontName: AnsiString, THPDFTable.DefaultFontSize: Single, THPDFTable.DefaultAlign: THPDFCellAlign | Ausweichschriftart und -ausrichtung für Zellen, die sie nicht selbst überschreiben |
THPDFTable.Padding: Single | Innerer Abstand zwischen Zellrahmen und Zellinhalt |
THPDFTable.BottomMargin: Single | Raum, der am unteren Seitenrand reserviert wird, bevor der Render-Durchlauf auf eine neue Seite umbricht |
THPDFTable.RepeatHeader: Boolean | Bei true wird der Kopfzeilenblock am Anfang jeder Fortsetzungsseite erneut ausgegeben |
THPDFTable.TotalHeightRendered: Single | Gesamthö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
| Element | Beschreibung |
|---|---|
THPDFTableRow.Create(InitialColCount: Integer) | Erstellt die Zeile mit der angegebenen Zellanzahl vorbefüllt |
THPDFTableRow.Destroy | Gibt die Zeile und ihre Zellen frei |
THPDFTableRow.AddCell: THPDFTableCell | Hängt eine Zelle an und liefert sie zurück |
THPDFTableRow.EnsureCells(Count: Integer): Integer | Erweitert die Zeile auf mindestens die angegebene Zellanzahl und liefert die neue Anzahl |
THPDFTableRow.Cells[Index: Integer]: THPDFTableCell | Standard-Array-Eigenschaft, die über einen Index auf eine Zelle zugreift |
THPDFTableRow.Count: Integer | Anzahl der Zellen, die die Zeile aktuell hält |
THPDFTableRow.IsHeader: Boolean | Markiert die Zeile als Kopfzeile, die mit THPDFTable.HeaderBgColor gemalt und wiederholt wird, wenn THPDFTable.RepeatHeader aktiviert ist |
THPDFTableRow.MinHeight: Single | Untergrenze für die gemessene Zeilenhöhe |
THPDFTableCell
THPDFTableCell trägt den Inhalt und die zellbezogenen Überschreibungen, die auf den Tabellen-Standardwerten aufsetzen
| Eigenschaft | Beschreibung |
|---|---|
THPDFTableCell.Text: WideString | Zelltext; 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: THPDFCellVAlign | Horizontale und vertikale Ausrichtung des Inhalts innerhalb der Zelle |
THPDFTableCell.ColSpan: Integer und THPDFTableCell.RowSpan: Integer | Horizontale 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: Boolean | Bricht langen Text über gemessene Zeilen innerhalb der Zelle um, standardmäßig aktiviert |
THPDFTableCell.ImageIndex: Integer | Bei null oder größer zeigt die Zelle statt Text das über THotPDF.AddImage mit diesem Index registrierte Bild; Standard ist -1 |
THPDFTableCell.ImageAspect: Single | Anzeigeseitenverhä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: Boolean | Leitet 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