เอนจินจัดหน้า
เอนจินการจัดวาง
ชั้นการจัดวางแปลง DOM ที่มีสไตล์เป็นเรขาคณิต: ต้นไม้กล่อง, จากนั้นเป็นส่วนย่อยที่มีขนาดและตำแหน่ง มันเป็นขั้นตอนหลังจากสไตล์ที่คำนวณแล้ว และผลลัพธ์ของมันคืออ็อบเจกต์ Python ธรรมดาที่คุณสามารถตรวจสอบได้.
จาก DOM ไปยัง Box Tree
build_box_tree() ผลิต BoxRoot ของรายการ BoxNode จากเอกสารที่มีสไตล์, จำแนกโมเดลการแสดงผลของแต่ละองค์ประกอบผ่าน classify_display() กับการนับจำนวน Display. ComputedStyle และ EdgeSizes ถือสไตล์ต่อกล่องและการวัดโมเดลกล่อง.
การจัดวางบล็อก
layout_block_tree() ทำการจัดวางระดับบล็อกบนต้นไม้กล่อง, ผลิต FragmentRoot ที่บรรจุรายการ BlockFragment พร้อมเรขาคณิตที่แก้ไขแล้ว.
การจัดวางแบบอินไลน์
เนื้อหาแบบอินไลน์ถูกจัดเป็นชิ้น ShapedRun และ InlineTextFragment แล้วประกอบเป็นบรรทัด LineFragment ผ่าน layout_inline_fragments() และ flush_inline_run().
Pagination
paginate_fragments() แบ่งผลลัพธ์ของฟรากเมนต์ออกเป็นหน้า PageFragment หน้า, เคารพ BreakHints, โดย PageMarginBoxes จำลองพื้นที่ขอบหน้ากระดาษและ flush_page() สรุปแต่ละหน้า.
เคล็ดลับและแนวปฏิบัติที่ดีที่สุด
- แก้ไขสไตล์ที่คำนวณแล้วก่อนการจัดวาง — โครงต้นไม้กล่องมาจากองค์ประกอบที่มีสไตล์
- ตรวจสอบ
EdgeSizesเมื่อมิติของกล่องดูไม่ถูกต้อง; ขอบและ padding จะถูกแก้ที่นั่น - ให้แยกแยะโครงต้นไม้กล่องและโครงต้นไม้ฟรากเมนต์ในโมเดลทางจิตของคุณ: กล่องอธิบายโครงสร้าง, ฟรากเมนต์อธิบายเรขาคณิตที่วางไว้
ปัญหาทั่วไป
| ปัญหา | สาเหตุ | การแก้ไข |
|---|---|---|
| ผลลัพธ์ส่วนที่ว่างเปล่า | การทำงาน Layout บนต้นไม้ที่ไม่มีสไตล์หรือว่างเปล่า | แนบสไตล์ชีตและเนื้อหาก่อน |
| การจำแนกการแสดงผลที่ไม่คาดคิด | ค่าที่คำนวณ display ขององค์ประกอบแตกต่างจากสมมติฐาน | ตรวจสอบผลลัพธ์ของ classify_display() สำหรับกล่อง |
| การแบ่งหน้าในตำแหน่งแปลกประหลาด | ไม่ได้ตั้งค่าคำแนะนำการแบ่ง | ให้ BreakHints แก่ paginate_fragments() |
FAQ
ความแตกต่างระหว่าง box กับ fragment คืออะไร?
Boxes (BoxNode) อธิบายโครงสร้างการจัดวางที่ได้มาจากสไตล์; fragments (BlockFragment, LineFragment) คือผลลัพธ์ที่ถูกวางพร้อมกับเรขาคณิต.
engine จัดการการแบ่งหน้าได้หรือไม่?
ใช่ — paginate_fragments() สร้างหน้า PageFragment พร้อมกับ margin boxes.
text runs มาจากที่ไหน?
เนื้อหาแบบอินไลน์จะถูกแปลงเป็นวัตถุ ShapedRun แล้วประกอบเป็นบรรทัด LineFragment.
API Reference สรุป
| คลาส/เมธอด | คำอธิบาย |
|---|---|
build_box_tree | สกัดต้นไม้กล่องจาก DOM ที่มีสไตล์ |
layout_block_tree | ดำเนินการจัดวางบล็อกบนต้นไม้กล่อง |
layout_inline_fragments | ประกอบเนื้อหาอินไลน์เป็นบรรทัด |
paginate_fragments | แยกส่วนย่อยเป็นหน้า |
BoxNode | กล่องหนึ่งในโครงสร้างการจัดวาง |
PageFragment | หนึ่งหน้าแบบจัดรูปแบบ |