Как работать с 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: Вывести дерево коробок

build_box_tree() создаёт BoxRoot из BoxNode записей, классифицируя модель отображения каждого элемента с помощью classify_display() в соответствии с перечислением Display; ComputedStyle и EdgeSizes несут стили и измерения модели коробки для каждого блока.


Шаг 5: Выполнить Layout и пагинацию

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) — это размещённые результаты с геометрией.

Где разрешаются margin и padding?

В EdgeSizes каждой коробки — первое место, куда смотреть, когда размеры удивляют вас.

Движок формирует текст?

Встроенный контент формируется в ShapedRun частей перед сборкой строки.

См. также:

 Русский