THPDFTable — układ i renderowanie tabel
THPDFTable to lekki silnik układu i renderowania tabel wprowadzony w v2.429.0 i wystawiany przez unit HPDFTable
Przed v2.429.0 producenci musieli rysować komórki ręcznie przez Rectangle plus TextOut z zaszytymi na stałe współrzędnymi X kolumn, sami zarządzając wysokościami wierszy, pasami zebry i łamaniem stron; THPDFTable steruje istniejącymi prymitywami rysowania THPDFPage, więc tabele renderują się z wymiernymi wysokościami wierszy, scalonymi komórkami i automatyczną kontynuacją po łamaniu stron
Unit
HPDFTable
Przykład użycia
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 jest właścicielem układu kolumn, kolekcji wierszy i przebiegu renderowania; rysuje przez komponent THotPDF przekazany do THPDFTable.Create i korzysta wyłącznie z publicznych składowych THPDFPage i THotPDF
Metody
| Metoda | Opis |
|---|---|
THPDFTable.Create(ADoc: THotPDF) | Tworzy tabelę związaną z dokumentem, który dostarcza strony, fonty i obrazy |
THPDFTable.Destroy | Zwalnia tabelę razem z każdym posiadanym wierszem i komórką |
THPDFTable.AddColumn(Width: Single): Integer | Dokłada kolumnę o podanej szerokości w bieżących jednostkach strony i zwraca jej indeks |
THPDFTable.AddRow: THPDFTableRow | Dokłada wiersz dopasowany do bieżącej liczby kolumn i zwraca go |
THPDFTable.SetBounds(AX, AY: Single) | Pozycjonuje początek tabeli na bieżącej stronie |
THPDFTable.Render | Mierzy wysokości wierszy, rysuje tła, obramowania i zawartość komórek, a dopóki zostały wiersze, kontynuuje na nowych stronach |
Właściwości
| Właściwość | Opis |
|---|---|
THPDFTable.Doc: THotPDF | Związany dokument przekazany do konstruktora |
THPDFTable.ColCount: Integer | Liczba kolumn dodanych przez THPDFTable.AddColumn |
THPDFTable.RowCount: Integer | Liczba wierszy dodanych przez THPDFTable.AddRow |
THPDFTable.Rows[Index: Integer]: THPDFTableRow | Dostęp do wiersza po indeksie |
THPDFTable.X: Single i THPDFTable.Y: Single | Początek tabeli na stronie w bieżących jednostkach strony |
THPDFTable.HeaderBgColor: TColor | Kolor tła malowany za wierszami nagłówkowymi |
THPDFTable.AlternatingBg: TColor | Tło w pasy zebry nakładane na naprzemienne wiersze niebędące nagłówkami |
THPDFTable.BorderColor: TColor i THPDFTable.BorderWidth: Single | Kolor i szerokość linii siatki używane dla obramowań komórek |
THPDFTable.DefaultFontName: AnsiString, THPDFTable.DefaultFontSize: Single, THPDFTable.DefaultAlign: THPDFCellAlign | Font i wyrównanie zastępcze dla komórek, które ich nie nadpisują |
THPDFTable.Padding: Single | Odstęp wewnętrzny między obramowaniem komórki a jej zawartością |
THPDFTable.BottomMargin: Single | Miejsce zarezerwowane na dole strony, zanim przebieg renderowania złamie się do nowej strony |
THPDFTable.RepeatHeader: Boolean | Gdy true, pas nagłówka jest emitowany ponownie w górnej części każdej strony kontynuacji |
THPDFTable.TotalHeightRendered: Single | Łączna wysokość zużyta przez ostatni przebieg renderowania na wszystkich stronach |
THPDFTableRow
THPDFTableRow przechowuje komórki jednego wiersza tabeli plus flagi poziomu wiersza używane podczas pomiaru i renderowania
| Składowa | Opis |
|---|---|
THPDFTableRow.Create(InitialColCount: Integer) | Tworzy wiersz z góry wypełniony podaną liczbą komórek |
THPDFTableRow.Destroy | Zwalnia wiersz i jego komórki |
THPDFTableRow.AddCell: THPDFTableCell | Dokłada jedną komórkę i zwraca ją |
THPDFTableRow.EnsureCells(Count: Integer): Integer | Rozrasta wiersz do co najmniej podanej liczby komórek i zwraca nową liczbę |
THPDFTableRow.Cells[Index: Integer]: THPDFTableCell | Domyślna właściwość tablicowa dająca dostęp do komórki po indeksie |
THPDFTableRow.Count: Integer | Liczba komórek aktualnie trzymanych przez wiersz |
THPDFTableRow.IsHeader: Boolean | Oznacza wiersz jako nagłówkowy, malowany kolorem THPDFTable.HeaderBgColor i powtarzany, gdy włączono THPDFTable.RepeatHeader |
THPDFTableRow.MinHeight: Single | Dolne ograniczenie nakładane na zmierzoną wysokość wiersza |
THPDFTableCell
THPDFTableCell niesie zawartość i nadpisania per komórka nakładane na wartości domyślne tabeli
| Właściwość | Opis |
|---|---|
THPDFTableCell.Text: WideString | Tekst komórki; renderowany przez THPDFPage.TextOutHTML, gdy THPDFTableCell.IsHTML jest true, dzięki czemu inline'owy markup pogrubienia, koloru, linków oraz indeksów dolnych i górnych jest honorowany |
THPDFTableCell.Align: THPDFCellAlign i THPDFTableCell.VAlign: THPDFCellVAlign | Poziome i pionowe wyrównanie zawartości w komórce |
THPDFTableCell.ColSpan: Integer i THPDFTableCell.RowSpan: Integer | Liczby scalenia w poziomie i w pionie, obie domyślnie 1 |
THPDFTableCell.BgColor: TColor i THPDFTableCell.HasBgColor: Boolean | Nadpisanie koloru tła per komórka i flaga jego obecności |
THPDFTableCell.TextColor: TColor i THPDFTableCell.HasTextColor: Boolean | Nadpisanie koloru tekstu per komórka i flaga jego obecności |
THPDFTableCell.FontName: AnsiString, THPDFTableCell.FontSize: Single, THPDFTableCell.FontStyle: TFontStyles, THPDFTableCell.HasFont: Boolean | Nadpisanie fontu per komórka i flaga jego obecności |
THPDFTableCell.WordWrap: Boolean | Zawija długi tekst na mierzone linie wewnątrz komórki, domyślnie włączone |
THPDFTableCell.ImageIndex: Integer | Gdy zero lub więcej, komórka pokazuje obraz zarejestrowany pod tym indeksem przez THotPDF.AddImage zamiast tekstu, domyślnie -1 |
THPDFTableCell.ImageAspect: Single | Proporcje wyświetlania komórki obrazowej; obraz jest skalowany do szerokości komórki, a jego wysokość wynika z tej proporcji, domyślnie 1.0 |
THPDFTableCell.IsHTML: Boolean | Kieruje THPDFTableCell.Text przez THPDFPage.TextOutHTML, dzięki czemu inline'owy markup jest renderowany |
Wyliczenia wyrównania
THPDFCellAlign = (caLeft, caCenter, caRight) wybiera poziome wyrównanie komórki, a THPDFCellVAlign = (cvaTop, cvaMiddle, cvaBottom) — pionowe wyrównanie komórki
Layout i zachowanie łamania stron
Wysokości wierszy są mierzone z zawartości komórek z poszanowaniem zawijania słów i THPDFTableRow.MinHeight, komórki rozciągane trafiają na wewnętrzną siatkę, więc THPDFTableCell.ColSpan i THPDFTableCell.RowSpan scalają się poprawnie w poprzek wierszy, a przebieg renderowania łamie się do nowej strony, gdy następny wiersz nie mieści się nad THPDFTable.BottomMargin
Gdy THPDFTable.RepeatHeader jest true, pas nagłówka jest emitowany ponownie w górnej części każdej strony kontynuacji przed dalszymi wierszami
Komórki obrazowe wprowadzone w v2.432.0 odwołują się po indeksie do obrazu zarejestrowanego przez THotPDF.AddImage, skalują się do szerokości komórki i wyliczają wysokość z THPDFTableCell.ImageAspect, dzięki czemu obraz zachowuje proporcje źródła