วิธีทำงานกับ Layout Engine ใน Python

วิธีทำงานกับ 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 ชิ้นก่อนการประกอบบรรทัด.

ดูเพิ่มเติม

 ภาษาไทย