THPDFTable – rozvržení a vykreslování tabulek

THPDFTable je lehkovážné rozvržení a vykreslovací engine pro tabulky představený ve verzi v2.429.0 a zpřístupněný unitou HPDFTable

Před verzí v2.429.0 museli producenti buňky kreslit ručně přes Rectangle plus TextOut s natvrdo zapsanými X souřadnicemi sloupců a výšky řádků, zebra pruhování a zalomení stránek řešit ručně; THPDFTable řídí stávající kreslicí primitivy THPDFPage, takže se tabulky vykreslí s změřenými výškami řádků, slučovanými buňkami a automatickým pokračováním na dalších stránkách

Unit

HPDFTable

Příklad použití

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 vlastní rozvržení sloupců, kolekci řádků a průchod vykreslení; kreslí přes komponentu THotPDF předanou do THPDFTable.Create a používá jen veřejné členy THPDFPage a THotPDF

Metody

MetodaPopis
THPDFTable.Create(ADoc: THotPDF)Vytvoří tabulku vázanou na dokument, který dodává stránky, fonty a obrázky
THPDFTable.DestroyUvolní tabulku spolu se všemi řádky a buňkami, které vlastní
THPDFTable.AddColumn(Width: Single): IntegerPřidá sloupec se zadanou šířkou v aktuálních jednotkách stránky a vrátí jeho index
THPDFTable.AddRow: THPDFTableRowPřidá řádek dimenzovaný na aktuální počet sloupců a vrátí ho
THPDFTable.SetBounds(AX, AY: Single)Umístí počátek tabulky na aktuální stránku
THPDFTable.RenderZměří výšky řádků, nakreslí pozadí, ohraničení a obsah buněk a pokračuje na nových stránkách, dokud zbývají řádky

Vlastnosti

VlastnostPopis
THPDFTable.Doc: THotPDFVázaný dokument předaný konstruktoru
THPDFTable.ColCount: IntegerPočet sloupců přidaných přes THPDFTable.AddColumn
THPDFTable.RowCount: IntegerPočet řádků přidaných přes THPDFTable.AddRow
THPDFTable.Rows[Index: Integer]: THPDFTableRowPřístup k řádku podle indexu
THPDFTable.X: Single a THPDFTable.Y: SinglePočátek tabulky na stránce v aktuálních jednotkách stránky
THPDFTable.HeaderBgColor: TColorBarva pozadí kreslená za řádky hlavičky
THPDFTable.AlternatingBg: TColorZebra pruhované pozadí aplikované na střídavé nehlavičkové řádky
THPDFTable.BorderColor: TColor a THPDFTable.BorderWidth: SingleBarva a šířka čar mřížky používané pro ohraničení buněk
THPDFTable.DefaultFontName: AnsiString, THPDFTable.DefaultFontSize: Single, THPDFTable.DefaultAlign: THPDFCellAlignZáložní font a zarovnání pro buňky, které je nepřepíší
THPDFTable.Padding: SingleVnitřní odsazení mezi ohraničením buňky a jejím obsahem
THPDFTable.BottomMargin: SingleProstor rezervovaný ve spodní části stránky, než průchod vykreslení přejde na novou stránku
THPDFTable.RepeatHeader: BooleanPři true se pásmo hlavičky znovu vygeneruje v horní části každé pokračující stránky
THPDFTable.TotalHeightRendered: SingleCelková výška spotřebovaná posledním průchodem vykreslení napříč všemi stránkami

THPDFTableRow

THPDFTableRow drží buňky jednoho řádku tabulky plus příznaky na úrovni řádku používané při měření a vykreslování

ČlenPopis
THPDFTableRow.Create(InitialColCount: Integer)Vytvoří řádek předvyplněný zadaným počtem buněk
THPDFTableRow.DestroyUvolní řádek a jeho buňky
THPDFTableRow.AddCell: THPDFTableCellPřidá jednu buňku a vrátí ji
THPDFTableRow.EnsureCells(Count: Integer): IntegerZvětší řádek alespoň na zadaný počet buněk a vrátí nový počet
THPDFTableRow.Cells[Index: Integer]: THPDFTableCellVýchozí array property pro přístup k buňce podle indexu
THPDFTableRow.Count: IntegerPočet buněk, které řádek aktuálně drží
THPDFTableRow.IsHeader: BooleanOznačí řádek jako hlavičku kreslenou barvou THPDFTable.HeaderBgColor a opakovanou, když je zapnuto THPDFTable.RepeatHeader
THPDFTableRow.MinHeight: SingleDolní mez aplikovaná na změřenou výšku řádku

THPDFTableCell

THPDFTableCell nese obsah a přepisy jednotlivých buněk aplikované nad výchozími hodnotami tabulky

VlastnostPopis
THPDFTableCell.Text: WideStringText buňky; při THPDFTableCell.IsHTML true se vykresluje přes THPDFPage.TextOutHTML, takže se dodrží inline markup pro bold, barvu, odkazy a sub-sup
THPDFTableCell.Align: THPDFCellAlign a THPDFTableCell.VAlign: THPDFCellVAlignHorizontální a vertikální zarovnání obsahu uvnitř buňky
THPDFTableCell.ColSpan: Integer a THPDFTableCell.RowSpan: IntegerHorizontální a vertikální počet slučování, oba defaultně 1
THPDFTableCell.BgColor: TColor a THPDFTableCell.HasBgColor: BooleanPřepis barvy pozadí jednotlivé buňky a jeho příznak přítomnosti
THPDFTableCell.TextColor: TColor a THPDFTableCell.HasTextColor: BooleanPřepis barvy textu jednotlivé buňky a jeho příznak přítomnosti
THPDFTableCell.FontName: AnsiString, THPDFTableCell.FontSize: Single, THPDFTableCell.FontStyle: TFontStyles, THPDFTableCell.HasFont: BooleanPřepis fontu jednotlivé buňky a jeho příznak přítomnosti
THPDFTableCell.WordWrap: BooleanZalamuje dlouhý text přes změřené řádky uvnitř buňky, defaultně zapnuté
THPDFTableCell.ImageIndex: IntegerPři nule nebo více buňka místo textu zobrazí obrázek zaregistrovaný pod tímto indexem přes THotPDF.AddImage, default -1
THPDFTableCell.ImageAspect: SinglePoměr stran zobrazení pro buňku s obrázkem; obrázek se škáluje na šířku buňky a výška se odvozuje z tohoto poměru, default 1.0
THPDFTableCell.IsHTML: BooleanSměruje THPDFTableCell.Text přes THPDFPage.TextOutHTML, takže se vykreslí inline markup

Výčty zarovnání

THPDFCellAlign = (caLeft, caCenter, caRight) vybírá horizontální zarovnání buňky a THPDFCellVAlign = (cvaTop, cvaMiddle, cvaBottom) vertikální zarovnání buňky

Chování rozvržení a zalomení stránek

Výšky řádků se měří z obsahu buněk se zachováním word wrap a THPDFTableRow.MinHeight, slučované buňky se umísťují na interní mřížku, takže THPDFTableCell.ColSpan a THPDFTableCell.RowSpan správně sloučí napříč řádky, a průchod vykreslení přejde na novou stránku, když se další řádek nevejde nad THPDFTable.BottomMargin

Když je THPDFTable.RepeatHeader true, pásmo hlavičky se znovu vygeneruje v horní části každé pokračující stránky, než se nakreslí další řádky

Buňky s obrázky představené ve verzi v2.432.0 odkazují podle indexu na obrázek zaregistrovaný přes THotPDF.AddImage, škálují se na šířku buňky a výšku odvozují z THPDFTableCell.ImageAspect, takže obrázek si zachová poměr stran zdroje

Viz také