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: Booleantrue 時每個續排頁頂端都會重新輸出表頭帶
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 推導高度,讓圖片保持原始長寬比

另請參閱