如何在 Python 中使用布局引擎

如何在 Python 中使用布局引擎

针对 Python 的 Aspose.HTML FOSS 的布局层从样式化文档计算几何形状: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() 生成一个包含 BoxNode 条目的 BoxRoot,使用 classify_display() 对每个元素的显示模型进行分类,并与 Display 枚举进行对照;ComputedStyle 和 EdgeSizes 承载每个盒子的样式和盒模型度量。


步骤 5:执行布局并分页

layout_block_tree() 产生一个包含 BlockFragment 几何体的 FragmentRoot;内联内容通过 layout_inline_fragments() 组合成 LineFragment 行;paginate_fragments() 将结果拆分为符合 BreakHints 的 PageFragment 页。

常见问题与解决方案

布局输出为空。 输入树没有样式化内容 — 在布局之前附加样式表和内容。

盒子具有意外的 display 分类。 Check classify_display() 针对该元素;已计算的 display 值驱动它。

分页符出现在奇怪的位置。 Provide BreakHints to paginate_fragments() 用于指导分页机会。

常见问题

盒子和片段之间有什么区别?

盒子(BoxNode)描述从样式派生的布局结构;片段(BlockFragment、LineFragment、PageFragment)是带有几何信息的放置结果。

外边距和内边距在哪里解析?

在每个盒子的 EdgeSizes 中——当尺寸让你惊讶时的首个检查位置。

引擎会对文本进行 shaping 吗?

内联内容在行组装之前被整形为 ShapedRun 块。

另请参阅

 中文