Công cụ bố cục
Động cơ bố cục
Lớp bố cục chuyển một DOM đã được định kiểu thành hình học: một cây hộp, sau đó là các đoạn với kích thước và vị trí. Đây là giai đoạn sau các kiểu đã tính toán, và các đầu ra của nó là các đối tượng Python thuần túy mà bạn có thể kiểm tra.
Từ DOM tới Cây Hộp
build_box_tree() tạo ra một BoxRoot gồm BoxNode mục từ một tài liệu đã định kiểu, phân loại mô hình hiển thị của mỗi phần tử thông qua classify_display() đối chiếu với danh mục Display. ComputedStyle và EdgeSizes mang kiểu per-box và các đo lường mô hình hộp.
Bố cục khối
layout_block_tree() thực hiện bố cục cấp khối trên cây hộp, tạo ra một FragmentRoot chứa BlockFragment mục với hình học đã được giải quyết.
Bố cục nội tuyến
Nội dung nội tuyến được tạo thành các mảnh ShapedRun và InlineTextFragment, sau đó lắp ráp thành các dòng LineFragment thông qua layout_inline_fragments() và flush_inline_run().
Pagination
paginate_fragments() chia đầu ra fragment thành PageFragment trang, tuân theo BreakHints, với PageMarginBoxes mô hình hoá các khu vực lề trang và flush_page() hoàn thiện mỗi trang.
Mẹo và Thực hành Tốt nhất
- Giải quyết các kiểu đã tính toán trước khi bố trí — cây hộp được suy ra từ các phần tử đã được định kiểu
- Kiểm tra
EdgeSizeskhi kích thước hộp trông sai; lề và khoảng đệm được giải quyết ở đó - Giữ cây hộp và cây fragment tách biệt trong mô hình tư duy của bạn: các hộp mô tả cấu trúc, các fragment mô tả hình học đã đặt
Các vấn đề thường gặp
| Vấn đề | Nguyên nhân | Khắc phục |
|---|---|---|
| Đầu ra đoạn rỗng | Bố cục chạy trên cây chưa được định dạng hoặc trống | Đính kèm stylesheet và nội dung trước |
| Phân loại hiển thị không mong đợi | Giá trị tính toán display của phần tử khác với giả định | Kiểm tra kết quả classify_display() cho hộp |
| Ngắt trang ở các vị trí lẻ | Chưa thiết lập gợi ý ngắt | Cung cấp BreakHints đến paginate_fragments() |
FAQ
Sự khác nhau giữa hộp và đoạn là gì?
Các hộp (BoxNode) mô tả cấu trúc bố cục được suy ra từ các kiểu; các đoạn (BlockFragment, LineFragment) là kết quả đã được đặt vị trí kèm hình học.
Động cơ có xử lý phân trang không?
Có — paginate_fragments() tạo ra PageFragment trang với các hộp lề.
Các đoạn văn bản đến từ đâu?
Nội dung nội tuyến được định dạng thành các đối tượng ShapedRun và lắp ráp thành các dòng LineFragment.
API Reference Tóm tắt
| Lớp/Phương thức | Mô tả |
|---|---|
build_box_tree | Rút ra cây hộp từ DOM đã được định dạng |
layout_block_tree | Thực hiện bố cục khối trên cây hộp |
layout_inline_fragments | Lắp ráp nội dung nội tuyến thành các dòng |
paginate_fragments | Chia các đoạn thành các trang |
BoxNode | Một hộp trong cấu trúc bố cục |
PageFragment | Một trang được bố trí |