Компонування та рендеринг таблиць 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, тож картинка зберігає пропорції джерела