Табличная разметка и отрисовка 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, поэтому встроенная разметка жирности, цвета, ссылок и нижних/верхних индексов учитывается |
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 | Когда значение 0 или больше, ячейка показывает изображение, зарегистрированное с этим индексом через 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, так что картинка сохраняет исходные пропорции