Компонування та рендеринг таблиць THPDFTable

THPDFTable — це легкий рушій компонування та рендерингу таблиць, представлений у v2.429.0 і доступний через юніт HPDFTable

До v2.429.0 генераторам доводилося малювати комірки вручну через Rectangle плюс TextOut із зашитими X-координатами стовпців, керуючи висотами рядків, зебра-смугуванням і розривами сторінок власноруч; THPDFTable керує наявними примітивами малювання THPDFPage, тож таблиці рендеряться з виміряними висотами рядків, об'єднаними комірками та автоматичним продовженням на нових сторінках

Юніт

HPDFTable

Приклад використання

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 володіє компонуванням стовпців, колекцією рядків і проходом рендерингу; він малює через компонент THotPDF, переданий у THPDFTable.Create, і використовує лише публічні члени THPDFPage і THotPDF

Методи

МетодОпис
THPDFTable.Create(ADoc: THotPDF)Створює таблицю, прив'язану до документа, що постачає сторінки, шрифти та зображення
THPDFTable.DestroyЗвільняє таблицю разом з кожним рядком і коміркою, якими вона володіє
THPDFTable.AddColumn(Width: Single): IntegerДодає стовпець із заданою шириною в поточних одиницях сторінки та повертає його індекс
THPDFTable.AddRow: THPDFTableRowДодає рядок, розмір якого відповідає поточній кількості стовпців, і повертає його
THPDFTable.SetBounds(AX, AY: Single)Позиціонує початок таблиці на поточній сторінці
THPDFTable.RenderВимірює висоти рядків, малює фони, рамки та вміст комірок і продовжує на нових сторінках, поки залишаються рядки

Властивості

ВластивістьОпис
THPDFTable.Doc: THotPDFПрив'язаний документ, поданий конструктору
THPDFTable.ColCount: IntegerКількість стовпців, доданих через THPDFTable.AddColumn
THPDFTable.RowCount: IntegerКількість рядків, доданих через THPDFTable.AddRow
THPDFTable.Rows[Index: Integer]: THPDFTableRowДоступ до рядка за індексом
THPDFTable.X: Single і THPDFTable.Y: SingleПочаток таблиці на сторінці в поточних одиницях сторінки
THPDFTable.HeaderBgColor: TColorКолір фону, що малюється за рядками заголовків
THPDFTable.AlternatingBg: TColorФон зебра-смугування, що застосовується до чергових рядків без заголовків
THPDFTable.BorderColor: TColor і THPDFTable.BorderWidth: SingleКолір і ширина ліній сітки, що використовуються для рамок комірок
THPDFTable.DefaultFontName: AnsiString, THPDFTable.DefaultFontSize: Single, THPDFTable.DefaultAlign: THPDFCellAlignРезервний шрифт і вирівнювання для комірок, які їх не перевизначають
THPDFTable.Padding: SingleВнутрішній відступ між рамкою комірки та її вмістом
THPDFTable.BottomMargin: SingleПростір, резервований унизу сторінки перед тим, як прохід рендерингу перейде на нову сторінку
THPDFTable.RepeatHeader: BooleanКоли true, смуга заголовка повторно видається вгорі кожної сторінки-продовження
THPDFTable.TotalHeightRendered: SingleЗагальна висота, спожита останнім проходом рендерингу на всіх сторінках

THPDFTableRow

THPDFTableRow утримує комірки одного рядка таблиці плюс прапорці рівня рядка, що використовуються під час вимірювання та рендерингу

ЧленОпис
THPDFTableRow.Create(InitialColCount: Integer)Створює рядок, попередньо заповнений заданою кількістю комірок
THPDFTableRow.DestroyЗвільняє рядок і його комірки
THPDFTableRow.AddCell: THPDFTableCellДодає одну комірку та повертає її
THPDFTableRow.EnsureCells(Count: Integer): IntegerНарощує рядок щонайменше до заданої кількості комірок і повертає нову кількість
THPDFTableRow.Cells[Index: Integer]: THPDFTableCellВластивість-масив за замовчуванням, що дає доступ до комірки за індексом
THPDFTableRow.Count: IntegerКількість комірок, які рядок утримує зараз
THPDFTableRow.IsHeader: BooleanПозначає рядок як рядок заголовка, що малюється кольором THPDFTable.HeaderBgColor і повторюється, коли увімкнено THPDFTable.RepeatHeader
THPDFTableRow.MinHeight: SingleНижня межа, що застосовується до виміряної висоти рядка

THPDFTableCell

THPDFTableCell несе вміст і перевизначення на рівні комірки, що застосовуються поверх усталених значень таблиці

ВластивістьОпис
THPDFTableCell.Text: WideStringТекст комірки; рендериться через THPDFPage.TextOutHTML, коли THPDFTableCell.IsHTML дорівнює true, тож вбудована розмітка для жирного, кольору, посилань та sub-sup береться до уваги
THPDFTableCell.Align: THPDFCellAlign і THPDFTableCell.VAlign: THPDFCellVAlignГоризонтальне та вертикальне вирівнювання вмісту всередині комірки
THPDFTableCell.ColSpan: Integer і THPDFTableCell.RowSpan: IntegerКількості горизонтального та вертикального об'єднання, обидва типово 1
THPDFTableCell.BgColor: TColor і THPDFTableCell.HasBgColor: BooleanПеревизначення кольору фону окремої комірки та прапорець його наявності
THPDFTableCell.TextColor: TColor і THPDFTableCell.HasTextColor: BooleanПеревизначення кольору тексту окремої комірки та прапорець його наявності
THPDFTableCell.FontName: AnsiString, THPDFTableCell.FontSize: Single, THPDFTableCell.FontStyle: TFontStyles, THPDFTableCell.HasFont: BooleanПеревизначення шрифту окремої комірки та прапорець його наявності
THPDFTableCell.WordWrap: BooleanПереносить довгий текст на виміряні рядки всередині комірки, типово увімкнено
THPDFTableCell.ImageIndex: IntegerКоли значення нульове або більше, комірка показує зображення, зареєстроване з цим індексом через THotPDF.AddImage, замість тексту, типово -1
THPDFTableCell.ImageAspect: SingleПропорція відображення для комірки з зображенням; зображення масштабується до ширини комірки, а його висота походить від цієї пропорції, типово 1.0
THPDFTableCell.IsHTML: BooleanСпрямовує THPDFTableCell.Text крізь THPDFPage.TextOutHTML, тож вбудована розмітка рендериться

Перечислення вирівнювання

THPDFCellAlign = (caLeft, caCenter, caRight) обирає горизонтальне вирівнювання комірки, а THPDFCellVAlign = (cvaTop, cvaMiddle, cvaBottom) — вертикальне вирівнювання комірки

Компонування та поведінка розривів сторінок

Висоти рядків вимірюються з вмісту комірок з урахуванням перенесення слів і THPDFTableRow.MinHeight, комірки, що охоплюють кілька позицій, розміщуються на внутрішній сітці, тож THPDFTableCell.ColSpan і THPDFTableCell.RowSpan коректно об'єднуються крізь рядки, а прохід рендерингу переходить на нову сторінку, коли наступний рядок не вміщується над THPDFTable.BottomMargin

Коли THPDFTable.RepeatHeader дорівнює true, смуга заголовка повторно видається вгорі кожної сторінки-продовження перед малюванням подальших рядків

Комірки з зображеннями, представлені у v2.432.0, посилаються за індексом на зображення, зареєстроване через THotPDF.AddImage, масштабуються до ширини комірки та виводять висоту з THPDFTableCell.ImageAspect, тож картинка зберігає пропорції джерела

Дивіться також