วิธีทำงานกับ Layout Engine ใน Python
ชั้นการจัดวางของ Aspose.HTML FOSS สำหรับ Python คำนวณเรขาคณิตจากเอกสารที่มีสไตล์: build_box_tree() สร้างโครงสร้างกล่อง, layout_block_tree() วางส่วนบล็อก, และ paginate_fragments() แบ่งผลลัพธ์เป็นหน้า. คู่มือนี้เตรียมเอกสารที่มีสไตล์ — อินพุตที่จำเป็น — และอธิบายแต่ละขั้นตอนการจัดวางโดยใช้ pip สำหรับการติดตั้ง.
คู่มือขั้นตอนต่อขั้นตอน
ขั้นตอนที่ 1: ติดตั้งแพ็กเกจ
git clone https://github.com/aspose-html-foss/Aspose.HTML-FOSS-for-Python.git
cd Aspose.HTML-FOSS-for-Python
pip install -e .ขั้นตอนที่ 2: นำเข้าคลาสที่จำเป็น
from aspose_html.dom import Document
from aspose_html.cssom import CSSStyleSheetขั้นตอนที่ 3: เตรียมเอกสารที่มีสไตล์
Layout ใช้สไตล์ที่คำนวณแล้ว ดังนั้นให้สร้างและกำหนดสไตล์ให้กับต้นไม้ก่อน:
doc = Document()
el = doc.create_element("div")
doc.append_child(el)
sheet = CSSStyleSheet()
sheet.replace_sync("div { color: red }")
doc.attach_style_sheet(sheet)
print(el.get_computed_style().get_property_value("color"))ขั้นตอนที่ 4: Derive the Box Tree
build_box_tree() สร้าง BoxRoot ของรายการ BoxNode , จำแนกโมเดลการแสดงผลของแต่ละองค์ประกอบด้วย classify_display() เทียบกับการนับจำนวน Display; ComputedStyle และ EdgeSizes มีสไตล์ต่อกล่องและการวัดโมเดลกล่อง.
ขั้นตอนที่ 5: Run Layout and Paginate
layout_block_tree() ให้ผลลัพธ์เป็น FragmentRoot ของเรขาคณิต BlockFragment; เนื้อหาอินไลน์จะรวมเป็นบรรทัด LineFragment ผ่าน layout_inline_fragments(); paginate_fragments() แบ่งผลลัพธ์ออกเป็นหน้า PageFragment ตาม BreakHints.
ปัญหาทั่วไปและวิธีแก้ไข
ผลลัพธ์การจัดวางเป็นค่าว่าง. ต้นไม้อินพุตไม่มีเนื้อหาที่มีรูปแบบ — ให้แนบสไตล์ชีตและเนื้อหาก่อนการจัดวาง.
กล่องมีการจัดประเภทการแสดงผลที่ไม่คาดคิด. Check classify_display() สำหรับองค์ประกอบ; ที่คำนวณได้ display ค่าที่คำนวณทำให้เกิดขึ้น.
การแบ่งหน้าเกิดขึ้นในตำแหน่งที่แปลกประหลาด. Provide BreakHints to paginate_fragments() เพื่อชี้นำโอกาสการแบ่งหน้า.
คำถามที่พบบ่อย
ความแตกต่างระหว่างกล่องและเฟร็กเมนต์คืออะไร?
กล่อง (BoxNode) อธิบายโครงสร้างการจัดวางที่มาจากสไตล์; เฟร็กเมนต์ (BlockFragment, LineFragment, PageFragment) เป็นผลลัพธ์ที่ถูกวางพร้อมกับเรขาคณิต.
ระยะขอบและการเว้นระยะภายในถูกกำหนดที่ไหน?
ใน EdgeSizes ของแต่ละกล่อง — จุดแรกที่ควรตรวจสอบเมื่อมิติทำให้คุณประหลาดใจ.
เอนจิ้นทำการจัดรูปแบบข้อความหรือไม่?
เนื้อหาในบรรทัดถูกจัดเป็น ShapedRun ชิ้นก่อนการประกอบบรรทัด.