Cách làm việc với Layout Engine trong Python
Lớp bố cục của Aspose.HTML FOSS cho Python tính toán hình học từ các tài liệu có kiểu dáng: build_box_tree() suy ra cấu trúc hộp, layout_block_tree() đặt các đoạn khối, và paginate_fragments() chia đầu ra thành các trang. Hướng dẫn này chuẩn bị một tài liệu có kiểu dáng — đầu vào yêu cầu — và giải thích từng giai đoạn bố cục, sử dụng pip để cài đặt.
Hướng dẫn từng bước
Bước 1: Cài đặt gói
git clone https://github.com/aspose-html-foss/Aspose.HTML-FOSS-for-Python.git
cd Aspose.HTML-FOSS-for-Python
pip install -e .Bước 2: Nhập các lớp cần thiết
from aspose_html.dom import Document
from aspose_html.cssom import CSSStyleSheetBước 3: Chuẩn bị tài liệu có kiểu dáng
Bố cục tiêu thụ các kiểu đã tính toán, vì vậy hãy xây dựng và áp dụng kiểu cho cây trước:
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"))Bước 4: Suy ra Cây Hộp
build_box_tree() tạo ra một BoxRoot của BoxNode mục, phân loại mô hình hiển thị của mỗi phần tử bằng classify_display() so với liệt kê Display; ComputedStyle và EdgeSizes mang theo kiểu cho từng hộp và các đo lường mô hình hộp.
Bước 5: Thực hiện Bố cục và Phân trang
layout_block_tree() tạo ra một FragmentRoot của BlockFragment hình học; nội dung nội tuyến được lắp ráp thành LineFragment dòng qua layout_inline_fragments(); paginate_fragments() chia kết quả thành PageFragment trang tuân thủ BreakHints.
Các vấn đề thường gặp và cách khắc phục
Kết quả bố cục trống. Cây đầu vào không có nội dung đã được định kiểu — hãy đính kèm các bảng kiểu và nội dung trước khi bố cục.
Một hộp có phân loại hiển thị bất ngờ. Check classify_display() cho phần tử; giá trị đã tính toán display giá trị điều khiển nó.
Các ngắt trang xuất hiện ở những vị trí lạ. Provide BreakHints to paginate_fragments() để hướng dẫn các cơ hội ngắt.
Câu hỏi thường gặp
Sự khác nhau giữa hộp và đoạn là gì?
Hộp (BoxNode) mô tả cấu trúc bố cục được suy ra từ các kiểu; đoạn (BlockFragment, LineFragment, PageFragment) là kết quả được đặt với hình học.
Lề và đệm được giải quyết ở đâu?
Trong EdgeSizes trên mỗi hộp — nơi đầu tiên cần xem khi kích thước gây bất ngờ cho bạn.
Engine có định dạng văn bản không?
Nội dung nội tuyến được chia thành ShapedRun phần trước khi lắp ráp dòng.