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: IntegerTHPDFTable.AddColumn으로 추가한 컬럼 수입니다
THPDFTable.RowCount: IntegerTHPDFTable.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: 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인덱스로 셀에 접근하는 기본 배열 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: Integer0 이상이면 셀이 텍스트 대신 THotPDF.AddImage로 그 인덱스에 등록된 이미지를 보여주며, 기본값은 -1입니다
THPDFTableCell.ImageAspect: Single이미지 셀의 표시 종횡비입니다. 이미지는 셀 폭에 맞춰 크기가 조정되고 높이는 이 비율에서 결정되며, 기본값은 1.0입니다
THPDFTableCell.IsHTML: BooleanTHPDFTableCell.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에서 높이를 결정해 그림이 원본 종횡비를 유지합니다

참고 항목