Constrained Streaming Layout

HotPDF สามารถวัดองค์ประกอบที่นำกลับมาใช้ใหม่ได้โดยไม่ต้องวาด, แยกย่อหน้า, แถว, คอนเทนเนอร์ และองค์ประกอบแบบกำหนดเองออกเป็นส่วนต่อที่เป็นเจ้าของเอง, ประกอบเลเยอร์หน้าที่นำกลับมาใช้ใหม่ได้, จัดเก็บหน้าที่เสร็จสมบูรณ์ในพื้นที่จัดเก็บแบบ file-backed, ใช้ข้อจำกัดการแบ่งหน้าของย่อหน้า และเปิดเผยการวินิจฉัยที่มีขอบเขต

สัญญา measure และ draw ที่นำกลับมาใช้ใหม่ได้

สืบทอดมาจาก THPDFLayoutElement และ implement Measure ที่ไม่มี side-effect พร้อมกับ Draw การวัดจะรับเพียง THPDFLayoutConstraints เท่านั้น จึงไม่มีหน้าหรือพื้นผิวการวาดของเอกสาร

MeasureLayoutElement ตรวจสอบมิติที่ไม่เป็นลบและคำนวณ Fits จากศูนย์กลางโดยใช้ข้อจำกัดความกว้างและความสูงเดียวกันกับที่ใช้สำหรับการจัดวาง

THPDFLayoutElementKind ให้ ElementKind จำแนก implementation ว่าเป็น lekParagraph, lekRow, lekContainer หรือ lekCustom ขณะที่ ElementPath จัดหาบริบทการวินิจฉัยที่คงตัว

ความเป็นเจ้าของการแยกและ overflow

องค์ประกอบที่แยกได้จะคืนค่า THPDFLayoutSplit ที่บรรจุองค์ประกอบ placed และ overflow ที่ผู้เรียกเป็นเจ้าของ PlaceLayoutElement จะวัดส่วน placed head ใหม่, วาดเฉพาะเมื่อพอดี และถ่ายโอนส่วนท้ายเข้าไปใน THPDFLayoutOverflow

THPDFLayoutOverflow บันทึกหน้าต้นทางและเส้นทางองค์ประกอบ, เป็นเจ้าของส่วนต่อโดยค่าเริ่มต้น และถ่ายโอนอย่างชัดเจนผ่าน DetachElement

เลเยอร์หน้าแบบ declarative

ลงทะเบียน callback ด้วย AddPageLayer ก่อน BeginDoc โดยเลือก plkBackground, plkHeader, plkFooter หรือ plkForeground

แต่ละ callback ทำงานตรงครั้งเดียวต่อหน้าตามลำดับ background, header, document-content, footer และ foreground และถูกแยกโดยคู่ graphics-state save และ restore

RemovePageLayer ลบการลงทะเบียนหนึ่งรายการตามตัวระบุ ขณะที่ ClearPageLayers รีเซ็ตการประกอบที่นำกลับมาใช้ใหม่ก่อนที่การสร้างเอกสารจะเริ่มขึ้น

THPDFPageLayerRegistration เก็บตัวระบุที่คงตัว, ชนิดเลเยอร์ และตัวจัดการ object-method ที่ใช้ภายในโดยรายการลงทะเบียนตามลำดับของเอกสาร

การ flush หน้าทันที

ตั้งค่า ImmediateFlushLayout ก่อน BeginDoc สำหรับรายงานที่ไม่ทราบจำนวนหน้าล่วงหน้า

เมื่อหน้าปิดลง content stream สุดท้ายที่ถูกบีบอัดหรือไม่บีบอัดจะย้ายจากหน่วยความจำไปยัง temporary-file stream ที่เป็นเจ้าของเอง ขณะที่อ็อบเจ็กต์ PDF ยังคงพร้อมใช้งานสำหรับการ finalise cross-reference และทรัพยากรตามปกติ

ImmediateFlushedPageCount และ ImmediateFlushedBytes รายงานปริมาณเนื้อหาที่จัดเก็บชั่วคราว และไฟล์ชั่วคราวจะถูกลบเมื่อ stream ที่เป็นเจ้าของถูกปล่อย

การแบ่งหน้าของย่อหน้า

ParagraphIndex := PDF.CreateParagraph(0, jtLeft, 36, 36, 36, 36);
PDF.ConfigureParagraphPagination(ParagraphIndex, True, 2, 2);
PDF.ConfigureParagraphDirection(ParagraphIndex, pdAuto);
PDF.BeginParagraph(ParagraphIndex);
PDF.CurrentParagraph.ShowUnicodeText(BodyText);
PDF.EndParagraph;

การวินิจฉัยเลย์เอาต์

THPDFLayoutDiagnostic บันทึก THPDFLayoutDiagnosticKind, ดัชมีหน้าต้นทางและที่เกี่ยวข้อง, สี่เหลี่ยมผืนผ้าที่ได้รับผลกระทบ, จำนวนบรรทัด และเหตุผลภาษาอังกฤษสำหรับแต่ละการตัดสินใจที่เก็บไว้

THPDFLayoutDiagnosticArray ถูกคืนโดย GetLayoutDiagnostics ขณะที่ GetLayoutDiagnostic รองรับการเข้าถึงตามดัชมีโดยไม่ต้องจัดสรรสำเนา

LayoutDiagnosticLimit จำกัดระเบียนที่เก็บไว้และ LayoutDiagnosticDroppedCount รายงานการตัดสินใจที่ถูกทิ้งหลังจากถึงขีดจำกัดนั้น

ทิศทางย่อหน้า

THPDFParagraphDirection จัดหา pdAuto, pdLeftToRight และ pdRightToLeft

DetectParagraphDirection ใช้การแก้ไข first-strong-character ข้ามสคริปต์ RTL ของ BMP และ supplementary-plane ดังนั้น prefix ที่เป็นกลางและ directional run รองจะไม่เลือกทิศทางหลักผิด

ใช้ ConfigureParagraphDirection สำหรับการตั้งค่าย่อหน้าแบบถาวร หรือพร็อพเพอร์ตี THPDFPara.Direction สำหรับย่อหน้าที่กำลังทำงานอยู่

ความหมายของย่อหน้า PDF/UA

Root := PDF.AddStructureElement('Document', nil);
Paragraph := PDF.BeginTaggedParagraph(Root, 'en-US', 'Accessible text');
PDF.CurrentPage.TextOut(36, 72, 0, WideString('Accessible text'));
PDF.EndTaggedParagraph;

PDF.BeginPaginationArtifact(pasHeader);
PDF.CurrentPage.TextOut(36, 20, 0, WideString('Running header'));
PDF.EndPaginationArtifact;

BeginTaggedParagraph emit ลำดับ marked-content /P มาตรฐานพร้อม MCID ที่จัดสรรแล้ว, การเชื่อมต่อ page parent-tree และค่า /Lang และ /ActualText ที่เป็นทางเลือก

THPDFPaginationArtifactSubtype จัดหา pasHeader, pasFooter, pasWatermark และ pasPageNumber โดย emit เป็นเนื้อหา /Artifact ที่มี /Type /Pagination และ subtype มาตรฐานที่ตรงกัน

API ที่เกี่ยวข้อง