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 のメンバだけを使用します
メソッド
| Method | Description |
|---|---|
THPDFTable.Create(ADoc: THotPDF) | ページ・フォント・画像を供給するドキュメントにバインドされたテーブルを作成します |
THPDFTable.Destroy | 所有するすべての行とセルもろともテーブルを解放します |
THPDFTable.AddColumn(Width: Single): Integer | 現在のページ単位で指定幅の列を追加し、そのインデックスを返します |
THPDFTable.AddRow: THPDFTableRow | 現在の列数に合わせた行を追加して返します |
THPDFTable.SetBounds(AX, AY: Single) | 現在のページ上にテーブルの原点を配置します |
THPDFTable.Render | 行の高さを測定し、背景・罫線・セル内容を描画します。行が残っている間は新しいページへ継続します |
プロパティ
| Property | Description |
|---|---|
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 は 1 つのテーブル行のセルに加えて、測定とレンダリングで使われる行レベルのフラグを保持します
| Member | Description |
|---|---|
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 は内容と、テーブルの既定値の上に適用されるセルごとの上書き設定を保持します
| Property | Description |
|---|---|
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 | 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 から高さを導くため、画像は元のアスペクト比を保ちます