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

MetodaOpis
THPDFTable.Create(ADoc: THotPDF)Tworzy tabelę związaną z dokumentem, który dostarcza strony, fonty i obrazy
THPDFTable.DestroyZwalnia tabelę razem z każdym posiadanym wierszem i komórką
THPDFTable.AddColumn(Width: Single): IntegerDokłada kolumnę o podanej szerokości w bieżących jednostkach strony i zwraca jej indeks
THPDFTable.AddRow: THPDFTableRowDokł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.RenderMierzy 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: THotPDFZwiązany dokument przekazany do konstruktora
THPDFTable.ColCount: IntegerLiczba kolumn dodanych przez THPDFTable.AddColumn
THPDFTable.RowCount: IntegerLiczba wierszy dodanych przez THPDFTable.AddRow
THPDFTable.Rows[Index: Integer]: THPDFTableRowDostęp do wiersza po indeksie
THPDFTable.X: Single i THPDFTable.Y: SinglePoczątek tabeli na stronie w bieżących jednostkach strony
THPDFTable.HeaderBgColor: TColorKolor tła malowany za wierszami nagłówkowymi
THPDFTable.AlternatingBg: TColorTło w pasy zebry nakładane na naprzemienne wiersze niebędące nagłówkami
THPDFTable.BorderColor: TColor i THPDFTable.BorderWidth: SingleKolor i szerokość linii siatki używane dla obramowań komórek
THPDFTable.DefaultFontName: AnsiString, THPDFTable.DefaultFontSize: Single, THPDFTable.DefaultAlign: THPDFCellAlignFont i wyrównanie zastępcze dla komórek, które ich nie nadpisują
THPDFTable.Padding: SingleOdstęp wewnętrzny między obramowaniem komórki a jej zawartością
THPDFTable.BottomMargin: SingleMiejsce zarezerwowane na dole strony, zanim przebieg renderowania złamie się do nowej strony
THPDFTable.RepeatHeader: BooleanGdy 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ładowaOpis
THPDFTableRow.Create(InitialColCount: Integer)Tworzy wiersz z góry wypełniony podaną liczbą komórek
THPDFTableRow.DestroyZwalnia wiersz i jego komórki
THPDFTableRow.AddCell: THPDFTableCellDokłada jedną komórkę i zwraca ją
THPDFTableRow.EnsureCells(Count: Integer): IntegerRozrasta wiersz do co najmniej podanej liczby komórek i zwraca nową liczbę
THPDFTableRow.Cells[Index: Integer]: THPDFTableCellDomyślna właściwość tablicowa dająca dostęp do komórki po indeksie
THPDFTableRow.Count: IntegerLiczba komórek aktualnie trzymanych przez wiersz
THPDFTableRow.IsHeader: BooleanOznacza wiersz jako nagłówkowy, malowany kolorem THPDFTable.HeaderBgColor i powtarzany, gdy włączono THPDFTable.RepeatHeader
THPDFTableRow.MinHeight: SingleDolne 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: WideStringTekst 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: THPDFCellVAlignPoziome i pionowe wyrównanie zawartości w komórce
THPDFTableCell.ColSpan: Integer i THPDFTableCell.RowSpan: IntegerLiczby scalenia w poziomie i w pionie, obie domyślnie 1
THPDFTableCell.BgColor: TColor i THPDFTableCell.HasBgColor: BooleanNadpisanie koloru tła per komórka i flaga jego obecności
THPDFTableCell.TextColor: TColor i THPDFTableCell.HasTextColor: BooleanNadpisanie koloru tekstu per komórka i flaga jego obecności
THPDFTableCell.FontName: AnsiString, THPDFTableCell.FontSize: Single, THPDFTableCell.FontStyle: TFontStyles, THPDFTableCell.HasFont: BooleanNadpisanie fontu per komórka i flaga jego obecności
THPDFTableCell.WordWrap: BooleanZawija długi tekst na mierzone linie wewnątrz komórki, domyślnie włączone
THPDFTableCell.ImageIndex: IntegerGdy zero lub więcej, komórka pokazuje obraz zarejestrowany pod tym indeksem przez THotPDF.AddImage zamiast tekstu, domyślnie -1
THPDFTableCell.ImageAspect: SingleProporcje 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: BooleanKieruje 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

Zobacz też