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 擁有欄版面、列集合與轉譯流程;它透過傳給 THPDFTable.Create 的 THotPDF 元件繪圖,只使用公開的 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 and THPDFTable.Y: Single | 頁面上以目前頁面單位表示的表格原點 |
THPDFTable.HeaderBgColor: TColor | 畫在表頭列後方的底色 |
THPDFTable.AlternatingBg: TColor | 套用在交錯非表頭列的斑馬紋底色 |
THPDFTable.BorderColor: TColor and 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 | 儲存格文字;THPDFTableCell.IsHTML 為 true 時經 THPDFPage.TextOutHTML 轉譯,粗體、顏色、連結與上下標等行內標記都會生效 |
THPDFTableCell.Align: THPDFCellAlign and THPDFTableCell.VAlign: THPDFCellVAlign | 儲存格內容的水平與垂直對齊 |
THPDFTableCell.ColSpan: Integer and THPDFTableCell.RowSpan: Integer | 水平與垂直合併數,預設都是 1 |
THPDFTableCell.BgColor: TColor and THPDFTableCell.HasBgColor: Boolean | 個別儲存格的底色覆寫及其存在旗標 |
THPDFTableCell.TextColor: TColor and 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 推導高度,讓圖片保持原始長寬比