การจัดวางและการเรนเดอร์ตารางของ THPDFTable

THPDFTable คือ engine จัดวางและเรนเดอร์ตารางแบบเบา ถูกเพิ่มเข้ามาใน v2.429.0 และเปิดให้ใช้ผ่านยูนิต HPDFTable

ก่อน v2.429.0 ผู้เขียน PDF ต้องวาดเซลล์เองด้วย Rectangle คู่กับ TextOut บนพิกัด X ของคอลัมน์ที่ hardcode ไว้ แล้วจัดการความสูงแถว, zebra striping และการขึ้นหน้าใหม่ด้วยมือ THPDFTable ขับ primitive การวาดของ THPDFPage ที่มีอยู่เดิม ตารางจึงเรนเดอร์ออกมาด้วยความสูงแถวที่วัดแล้ว, เซลล์ merge และการต่อเนื่องข้ามหน้าแบบอัตโนมัติ

ยูนิต

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 เป็นเจ้าของ layout คอลัมน์ ชุดแถว และรอบการเรนเดอร์ วาดผ่านคอมโพเนนต์ THotPDF ที่ส่งให้ THPDFTable.Create และใช้เฉพาะสมาชิก public ของ THPDFPage กับ THotPDF เท่านั้น

เมธอด

เมธอดคำอธิบาย
THPDFTable.Create(ADoc: THotPDF)สร้างตารางที่ผูกกับเอกสารซึ่งจัดหาหน้า ฟอนต์ และรูปภาพให้
THPDFTable.Destroyคืนหน่วยความจำของตารางพร้อมทุกแถวและทุกเซลล์ที่มันเป็นเจ้าของ
THPDFTable.AddColumn(Width: Single): Integerเพิ่มคอลัมน์ด้วยความกว้างที่กำหนดในหน่วยหน้าปัจจุบัน แล้วคืน index ของมัน
THPDFTable.AddRow: THPDFTableRowเพิ่มแถวที่จัดขนาดตามจำนวนคอลัมน์ปัจจุบัน แล้วคืนแถวนั้น
THPDFTable.SetBounds(AX, AY: Single)กำหนดตำแหน่งจุดกำเนิดของตารางบนหน้าปัจจุบัน
THPDFTable.Renderวัดความสูงแถว วาดพื้นหลัง เส้นขอบ และเนื้อหาในเซลล์ แล้วทำต่อบนหน้าใหม่จนกว่าแถวจะหมด

คุณสมบัติ

คุณสมบัติคำอธิบาย
THPDFTable.Doc: THotPDFเอกสารที่ผูกไว้ซึ่งส่งให้ constructor
THPDFTable.ColCount: Integerจำนวนคอลัมน์ที่เพิ่มด้วย THPDFTable.AddColumn
THPDFTable.RowCount: Integerจำนวนแถวที่เพิ่มด้วย THPDFTable.AddRow
THPDFTable.Rows[Index: Integer]: THPDFTableRowเข้าถึงแถวด้วย index
THPDFTable.X: Single และ THPDFTable.Y: Singleจุดกำเนิดของตารางบนหน้า ในหน่วยหน้าปัจจุบัน
THPDFTable.HeaderBgColor: TColorสีพื้นหลังที่ระบายหลังแถวหัวตาราง
THPDFTable.AlternatingBg: TColorสีพื้นหลังลาย zebra ที่ใช้กับแถวสลับที่ไม่ใช่หัวตาราง
THPDFTable.BorderColor: TColor และ THPDFTable.BorderWidth: Singleสีและความกว้างของเส้นกริดที่ใช้เป็นเส้นขอบเซลล์
THPDFTable.DefaultFontName: AnsiString, THPDFTable.DefaultFontSize: Single, THPDFTable.DefaultAlign: THPDFCellAlignฟอนต์สำรองและการจัดวางสำหรับเซลล์ที่ไม่ override ทับค่าเหล่านี้
THPDFTable.Padding: Singleระยะห่างภายในระหว่างเส้นขอบเซลล์กับเนื้อหาของมัน
THPDFTable.BottomMargin: Singleพื้นที่สำรองที่ด้านล่างของหน้า ก่อนรอบเรนเดอร์จะขึ้นหน้าใหม่
THPDFTable.RepeatHeader: Booleanเมื่อเป็น true แถบหัวตารางจะถูกปล่อยซ้ำที่ด้านบนของทุกหน้าต่อเนื่อง
THPDFTable.TotalHeightRendered: Singleความสูงรวมที่รอบเรนเดอร์ล่าสุดใช้ไปครบทุกหน้า

THPDFTableRow

THPDFTableRow เก็บเซลล์ของแถวตารางหนึ่งแถว บวก flag ระดับแถวที่ใช้ตอนวัดขนาดและตอนเรนเดอร์

สมาชิกคำอธิบาย
THPDFTableRow.Create(InitialColCount: Integer)สร้างแถวโดยเตรียมเซลล์ไว้ล่วงหน้าตามจำนวนที่กำหนด
THPDFTableRow.Destroyคืนหน่วยความจำของแถวและเซลล์ทั้งหมดในแถว
THPDFTableRow.AddCell: THPDFTableCellเพิ่มเซลล์หนึ่งเซลล์แล้วคืนเซลล์นั้น
THPDFTableRow.EnsureCells(Count: Integer): Integerขยายแถวให้มีเซลล์อย่างน้อยเท่าจำนวนที่กำหนด แล้วคืนจำนวนใหม่
THPDFTableRow.Cells[Index: Integer]: THPDFTableCellarray property default ที่เข้าถึงเซลล์ด้วย index
THPDFTableRow.Count: Integerจำนวนเซลล์ที่แถวถืออยู่ปัจจุบัน
THPDFTableRow.IsHeader: Booleanระบุว่าเป็นแถวหัวตาราง ระบายด้วย THPDFTable.HeaderBgColor และถูกทำซ้ำเมื่อเปิด THPDFTable.RepeatHeader ไว้
THPDFTableRow.MinHeight: Singleขอบล่างที่บังคับกับความสูงแถวที่วัดได้

THPDFTableCell

THPDFTableCell จัดเนื้อหาและค่า override รายเซลล์ที่ทับบนค่า default ของตาราง

คุณสมบัติคำอธิบาย
THPDFTableCell.Text: WideStringข้อความของเซลล์ เรนเดอร์ผ่าน THPDFPage.TextOutHTML เมื่อ THPDFTableCell.IsHTML เป็น true inline markup สำหรับตัวหนา สี ลิงก์ และ sub-sup จึงมีผลครบ
THPDFTableCell.Align: THPDFCellAlign และ THPDFTableCell.VAlign: THPDFCellVAlignการจัดวางเนื้อหาแนวนอนและแนวตั้งภายในเซลล์
THPDFTableCell.ColSpan: Integer และ THPDFTableCell.RowSpan: Integerจำนวน merge แนวนอนและแนวตั้ง ค่า default ของทั้งคู่คือ 1
THPDFTableCell.BgColor: TColor และ THPDFTableCell.HasBgColor: Booleanค่า override สีพื้นหลังรายเซลล์กับ flag บอกว่ามีการตั้งค่า
THPDFTableCell.TextColor: TColor และ THPDFTableCell.HasTextColor: Booleanค่า override สีข้อความรายเซลล์กับ flag บอกว่ามีการตั้งค่า
THPDFTableCell.FontName: AnsiString, THPDFTableCell.FontSize: Single, THPDFTableCell.FontStyle: TFontStyles, THPDFTableCell.HasFont: Booleanค่า override ฟอนต์รายเซลล์กับ flag บอกว่ามีการตั้งค่า
THPDFTableCell.WordWrap: Booleanตัดข้อความยาวเป็นหลายบรรทัดที่วัดขนาดไว้ภายในเซลล์ เปิดไว้เป็นค่า default
THPDFTableCell.ImageIndex: Integerเมื่อเป็นศูนย์ขึ้นไป เซลล์จะแสดงรูปที่ลงทะเบียน index นั้นไว้ผ่าน THotPDF.AddImage แทนข้อความ ค่า default -1
THPDFTableCell.ImageAspect: Singleอัตราส่วนการแสดงของเซลล์รูปภาพ รูปถูกปรับให้กว้างเท่าเซลล์แล้วความสูงไล่ตามอัตราส่วนนี้ ค่า default 1.0
THPDFTableCell.IsHTML: Booleanส่ง THPDFTableCell.Text เข้าเส้นทาง THPDFPage.TextOutHTML เพื่อให้ inline markup ถูกเรนเดอร์

enum การจัดวาง

THPDFCellAlign = (caLeft, caCenter, caRight) เลือกการจัดวางเซลล์แนวนอน และ THPDFCellVAlign = (cvaTop, cvaMiddle, cvaBottom) เลือกการจัดวางเซลล์แนวตั้ง

พฤติกรรมการจัดวางและการขึ้นหน้าใหม่

ความสูงแถววัดจากเนื้อหาในเซลล์โดยเคารพ word wrap และ THPDFTableRow.MinHeight เซลล์แบบ span ถูกวางบนกริดภายใน THPDFTableCell.ColSpan กับ THPDFTableCell.RowSpan จึง merge ข้ามแถวได้ถูกต้อง และรอบเรนเดอร์จะขึ้นหน้าใหม่เมื่อแถวถัดไปไม่พออยู่เหนือ THPDFTable.BottomMargin

เมื่อ THPDFTable.RepeatHeader เป็น true แถบหัวตารางจะถูกปล่อยซ้ำที่ด้านบนของทุกหน้าต่อเนื่อง ก่อนวาดแถวถัด ๆ ไป

เซลล์รูปภาพที่เพิ่มเข้ามาใน v2.432.0 อ้างรูปที่ลงทะเบียนผ่าน THotPDF.AddImage ด้วย index ปรับขนาดให้กว้างเท่าเซลล์ แล้วไล่ความสูงจาก THPDFTableCell.ImageAspect ภาพจึงคงอัตราส่วนเดิมของต้นทาง

ดูเพิ่มเติม