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 のメンバだけを使用します

メソッド

MethodDescription
THPDFTable.Create(ADoc: THotPDF)ページ・フォント・画像を供給するドキュメントにバインドされたテーブルを作成します
THPDFTable.Destroy所有するすべての行とセルもろともテーブルを解放します
THPDFTable.AddColumn(Width: Single): Integer現在のページ単位で指定幅の列を追加し、そのインデックスを返します
THPDFTable.AddRow: THPDFTableRow現在の列数に合わせた行を追加して返します
THPDFTable.SetBounds(AX, AY: Single)現在のページ上にテーブルの原点を配置します
THPDFTable.Render行の高さを測定し、背景・罫線・セル内容を描画します。行が残っている間は新しいページへ継続します

プロパティ

PropertyDescription
THPDFTable.Doc: THotPDFコンストラクタに渡されたバインド済みドキュメント
THPDFTable.ColCount: IntegerTHPDFTable.AddColumn で追加された列数
THPDFTable.RowCount: IntegerTHPDFTable.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 は 1 つのテーブル行のセルに加えて、測定とレンダリングで使われる行レベルのフラグを保持します

MemberDescription
THPDFTableRow.Create(InitialColCount: Integer)指定数のセルをあらかじめ備えた行を作成します
THPDFTableRow.Destroy行とそのセルを解放します
THPDFTableRow.AddCell: THPDFTableCellセルを 1 つ追加して返します
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 は内容と、テーブルの既定値の上に適用されるセルごとの上書き設定を保持します

PropertyDescription
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: Integer0 以上の場合、テキストの代わりに THotPDF.AddImage でそのインデックスに登録された画像を表示します。既定値は -1
THPDFTableCell.ImageAspect: Single画像セルの表示アスペクト比。画像はセル幅にスケールされ、高さはこの比率から導かれます。既定値は 1.0
THPDFTableCell.IsHTML: BooleanTHPDFTableCell.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 から高さを導くため、画像は元のアスペクト比を保ちます

関連項目