Diseño y renderizado de tablas THPDFTable
THPDFTable es el engine liviano de diseño y renderizado de tablas introducido en v2.429.0 y expuesto por la unidad HPDFTable
Antes de v2.429.0 quienes producían PDF tenían que dibujar las celdas a mano con Rectangle más TextOut y coordenadas X de columnas codificadas en duro, gestionando alturas de fila, rayado cebra y saltos de página manualmente; THPDFTable maneja las primitivas de dibujo existentes de THPDFPage de modo que las tablas se rendericen con alturas de fila medidas, celdas combinadas y continuación automática en saltos de página
Unidad
HPDFTable
Ejemplo de uso
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 es dueño del layout de columnas, de la colección de filas y de la pasada de render; dibuja a través del componente THotPDF pasado a THPDFTable.Create y usa solo miembros públicos de THPDFPage y THotPDF
Métodos
| Método | Descripción |
|---|---|
THPDFTable.Create(ADoc: THotPDF) | Crea la tabla ligada al documento que suministra páginas, fuentes e imágenes |
THPDFTable.Destroy | Libera la tabla junto con cada fila y celda de su propiedad |
THPDFTable.AddColumn(Width: Single): Integer | Agrega una columna con el ancho dado en las unidades actuales de página y devuelve su índice |
THPDFTable.AddRow: THPDFTableRow | Agrega una fila dimensionada a la cantidad actual de columnas y la devuelve |
THPDFTable.SetBounds(AX, AY: Single) | Posiciona el origen de la tabla en la página actual |
THPDFTable.Render | Mide las alturas de fila, dibuja fondos, bordes y contenido de celdas, y continúa en páginas nuevas mientras queden filas |
Propiedades
| Propiedad | Descripción |
|---|---|
THPDFTable.Doc: THotPDF | El documento ligado suministrado al constructor |
THPDFTable.ColCount: Integer | Cantidad de columnas agregadas con THPDFTable.AddColumn |
THPDFTable.RowCount: Integer | Cantidad de filas agregadas con THPDFTable.AddRow |
THPDFTable.Rows[Index: Integer]: THPDFTableRow | Accede a una fila por índice |
THPDFTable.X: Single y THPDFTable.Y: Single | Origen de la tabla en la página, en las unidades actuales de página |
THPDFTable.HeaderBgColor: TColor | Color de fondo pintado detrás de las filas de encabezado |
THPDFTable.AlternatingBg: TColor | Fondo de rayado cebra aplicado a las filas alternas que no son de encabezado |
THPDFTable.BorderColor: TColor y THPDFTable.BorderWidth: Single | Color y ancho de las líneas de la grilla usados para los bordes de celdas |
THPDFTable.DefaultFontName: AnsiString, THPDFTable.DefaultFontSize: Single, THPDFTable.DefaultAlign: THPDFCellAlign | Fuente y alineación de respaldo para las celdas que no las sobrescriben |
THPDFTable.Padding: Single | Espaciado interior entre el borde de una celda y su contenido |
THPDFTable.BottomMargin: Single | Espacio reservado en la parte inferior de una página antes de que la pasada de render salte a una página nueva |
THPDFTable.RepeatHeader: Boolean | Cuando es true, la banda de encabezado se vuelve a emitir al inicio de cada página de continuación |
THPDFTable.TotalHeightRendered: Single | Altura total consumida por la última pasada de render a través de todas las páginas |
THPDFTableRow
THPDFTableRow contiene las celdas de una fila de tabla más los flags a nivel de fila usados durante la medición y el render
| Miembro | Descripción |
|---|---|
THPDFTableRow.Create(InitialColCount: Integer) | Crea la fila prellenada con la cantidad dada de celdas |
THPDFTableRow.Destroy | Libera la fila y sus celdas |
THPDFTableRow.AddCell: THPDFTableCell | Agrega una celda y la devuelve |
THPDFTableRow.EnsureCells(Count: Integer): Integer | Hace crecer la fila hasta al menos la cantidad dada de celdas y devuelve el nuevo conteo |
THPDFTableRow.Cells[Index: Integer]: THPDFTableCell | Propiedad de arreglo por defecto que accede a una celda por índice |
THPDFTableRow.Count: Integer | Cantidad de celdas que la fila contiene actualmente |
THPDFTableRow.IsHeader: Boolean | Marca la fila como fila de encabezado pintada con THPDFTable.HeaderBgColor y repetida cuando THPDFTable.RepeatHeader está habilitado |
THPDFTableRow.MinHeight: Single | Límite inferior aplicado a la altura medida de la fila |
THPDFTableCell
THPDFTableCell lleva el contenido y las sobrescrituras por celda aplicadas sobre los valores por defecto de la tabla
| Propiedad | Descripción |
|---|---|
THPDFTableCell.Text: WideString | Texto de la celda; se renderiza a través de THPDFPage.TextOutHTML cuando THPDFTableCell.IsHTML es true, de modo que el markup en línea de negrita, color, links y sub-sup se honra |
THPDFTableCell.Align: THPDFCellAlign y THPDFTableCell.VAlign: THPDFCellVAlign | Alineación horizontal y vertical del contenido dentro de la celda |
THPDFTableCell.ColSpan: Integer y THPDFTableCell.RowSpan: Integer | Conteos de combinación horizontal y vertical, ambos con 1 por defecto |
THPDFTableCell.BgColor: TColor y THPDFTableCell.HasBgColor: Boolean | Sobrescritura del color de fondo por celda y su flag de presencia |
THPDFTableCell.TextColor: TColor y THPDFTableCell.HasTextColor: Boolean | Sobrescritura del color de texto por celda y su flag de presencia |
THPDFTableCell.FontName: AnsiString, THPDFTableCell.FontSize: Single, THPDFTableCell.FontStyle: TFontStyles, THPDFTableCell.HasFont: Boolean | Sobrescritura de fuente por celda y su flag de presencia |
THPDFTableCell.WordWrap: Boolean | Divide el texto largo en líneas medidas dentro de la celda, habilitado por defecto |
THPDFTableCell.ImageIndex: Integer | Cuando es cero o mayor, la celda muestra la imagen registrada con ese índice a través de THotPDF.AddImage en lugar de texto, por defecto -1 |
THPDFTableCell.ImageAspect: Single | Relación de aspecto de visualización para una celda de imagen; la imagen se escala al ancho de la celda y su altura se deriva de esta relación, por defecto 1.0 |
THPDFTableCell.IsHTML: Boolean | Enruta THPDFTableCell.Text por THPDFPage.TextOutHTML de modo que el markup en línea se renderice |
Enums de alineación
THPDFCellAlign = (caLeft, caCenter, caRight) selecciona la alineación horizontal de la celda y THPDFCellVAlign = (cvaTop, cvaMiddle, cvaBottom) selecciona la alineación vertical de la celda
Layout y comportamiento de saltos de página
Las alturas de fila se miden a partir del contenido de las celdas honrando el word wrap y THPDFTableRow.MinHeight, las celdas con span se colocan en una grilla interna de modo que THPDFTableCell.ColSpan y THPDFTableCell.RowSpan se combinen correctamente a través de filas, y la pasada de render salta a una página nueva cuando la siguiente fila no cabe por encima de THPDFTable.BottomMargin
Cuando THPDFTable.RepeatHeader es true, la banda de encabezado se vuelve a emitir al inicio de cada página de continuación antes de dibujar más filas
Las celdas de imagen introducidas en v2.432.0 referencian por índice una imagen registrada a través de THotPDF.AddImage, se escalan al ancho de la celda y derivan su altura de THPDFTableCell.ImageAspect de modo que la imagen conserve su relación de aspecto de origen