Як працювати з 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: Підготувати стильовий документ
Розмітка споживає обчислені стилі, тому спочатку побудуйте та оформіть дерево:
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: Вивести дерево коробок
build_box_tree() створює BoxRoot з BoxNode записів, класифікуючи модель відображення кожного елемента за допомогою classify_display() проти перерахування Display; ComputedStyle і EdgeSizes містять стиль для кожної коробки та вимірювання моделі коробки.
Крок 5: Запустити розмітку та пагінацію
layout_block_tree() дає FragmentRoot з BlockFragment геометрії; вбудований вміст збирається у LineFragment рядки за допомогою layout_inline_fragments(); paginate_fragments() розділяє результати на PageFragment сторінки, дотримуючись BreakHints.
Типові проблеми та виправлення
Вивід макету порожній. У вхідному дереві не було стилізованого вмісту — приєднайте таблиці стилів і вміст перед макетом.
Бокс має неочікувану класифікацію display. Check classify_display() для елемента; обчислене display значення керує ним.
Розриви сторінок з’являються у дивних місцях. Provide BreakHints to paginate_fragments() для керування можливостями розриву.
Поширені запитання
У чому різниця між блоками та фрагментами?
Блоки (BoxNode) описують структуру розкладки, отриману зі стилів; фрагменти (BlockFragment, LineFragment, PageFragment) — це розміщені результати з геометрією.
Де розв’язуються margin та padding?
У EdgeSizes кожного блоку — перше місце, куди слід заглянути, коли розміри вас здивують.
Чи формує текст рушій?
Вбудований вміст формується у ShapedRun частин перед складанням рядка.