THPDFTable 표 레이아웃 및 렌더링
THPDFTable은 v2.429.0에서 도입되어 HPDFTable unit을 통해 노출되는 경량 표 레이아웃·렌더링 엔진입니다
v2.429.0 이전 생산자는 Rectangle과 TextOut에 하드코딩한 컬럼 X 좌표로 셀을 직접 그리면서 행 높이, 줄무늬 배경, 페이지 나눔을 손으로 관리해야 했습니다. THPDFTable은 기존 THPDFPage 드로잉 프리미티브를 구동하므로 표가 측정된 행 높이, 병합 셀, 자동 페이지 나눔 연속과 함께 렌더링됩니다
Unit
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 컴포넌트를 통해 그리며, public THPDFPage와 THotPDF 멤버만 사용합니다
메서드
| 이름 | 목적 |
|---|---|
THPDFTable.Create(ADoc: THotPDF) | 페이지, 폰트, 이미지를 공급하는 문서에 결합된 표를 만듭니다 |
THPDFTable.Destroy | 표가 소유한 모든 행과 셀을 함께 해제합니다 |
THPDFTable.AddColumn(Width: Single): Integer | 현재 페이지 단위로 주어진 폭의 컬럼을 추가하고 그 인덱스를 반환합니다 |
THPDFTable.AddRow: THPDFTableRow | 현재 컬럼 수에 맞춘 크기의 행을 추가하고 반환합니다 |
THPDFTable.SetBounds(AX, AY: Single) | 현재 페이지에서 표 원점의 위치를 정합니다 |
THPDFTable.Render | 행 높이를 측정하고 배경, 테두리, 셀 내용을 그리며, 행이 남아 있는 동안 새 페이지에서 이어서 그립니다 |
Property
| 이름 | 목적 |
|---|---|
THPDFTable.Doc: THotPDF | 생성자에 전달된 결합된 문서입니다 |
THPDFTable.ColCount: Integer | THPDFTable.AddColumn으로 추가한 컬럼 수입니다 |
THPDFTable.RowCount: Integer | THPDFTable.AddRow으로 추가한 행 수입니다 |
THPDFTable.Rows[Index: Integer]: THPDFTableRow | 인덱스로 행에 접근합니다 |
THPDFTable.X: Single과 THPDFTable.Y: Single | 현재 페이지 단위의 페이지 위 표 원점입니다 |
THPDFTable.HeaderBgColor: TColor | 헤더 행 뒤에 칠해지는 배경색입니다 |
THPDFTable.AlternatingBg: TColor | 번갈아 나오는 비헤더 행에 적용되는 줄무늬 배경입니다 |
THPDFTable.BorderColor: TColor와 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 | 인덱스로 셀에 접근하는 기본 배열 property입니다 |
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과 THPDFTableCell.VAlign: THPDFCellVAlign | 셀 안에서 내용의 가로·세로 정렬입니다 |
THPDFTableCell.ColSpan: Integer와 THPDFTableCell.RowSpan: Integer | 가로·세로 병합 수이며 둘 다 기본값은 1입니다 |
THPDFTableCell.BgColor: TColor와 THPDFTableCell.HasBgColor: Boolean | 셀별 배경색 재정의와 그 설정 여부 플래그입니다 |
THPDFTableCell.TextColor: TColor와 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로 보내 인라인 마크업이 렌더링되게 합니다 |
정렬 enum
THPDFCellAlign = (caLeft, caCenter, caRight)는 셀의 가로 정렬을 고르고 THPDFCellVAlign = (cvaTop, cvaMiddle, cvaBottom)은 세로 정렬을 고릅니다
레이아웃과 페이지 나눔 동작
행 높이는 word wrap과 THPDFTableRow.MinHeight를 존중해 셀 내용에서 측정되고, 병합 셀은 내부 그리드에 배치되어 THPDFTableCell.ColSpan과 THPDFTableCell.RowSpan이 여러 행에 걸쳐 올바르게 병합됩니다. 다음 행이 THPDFTable.BottomMargin 위에 들어가지 않으면 렌더링 패스가 새 페이지로 넘어갑니다
THPDFTable.RepeatHeader가 True이면 이후 행이 그려지기 전에 연속 페이지마다 상단에 헤더 밴드를 다시 출력합니다
v2.432.0에서 도입된 이미지 셀은 THotPDF.AddImage로 등록된 이미지를 인덱스로 참조하고, 셀 폭에 맞춰 크기를 조정하며, THPDFTableCell.ImageAspect에서 높이를 결정해 그림이 원본 종횡비를 유지합니다