การจัดวางและการเรนเดอร์ตารางของ 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]: THPDFTableCell | array 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 ภาพจึงคงอัตราส่วนเดิมของต้นทาง