Como trabalhar com o Motor de Layout em Python
A camada de layout do Aspose.HTML FOSS para Python calcula a geometria a partir de documentos estilizados: build_box_tree() deriva a estrutura de caixas, layout_block_tree() posiciona fragmentos de blocos e paginate_fragments() divide a saída em páginas. Este guia prepara um documento estilizado — a entrada necessária — e explica cada etapa de layout, usando pip para a instalação.
Guia passo a passo
Etapa 1: Instale o pacote
git clone https://github.com/aspose-html-foss/Aspose.HTML-FOSS-for-Python.git
cd Aspose.HTML-FOSS-for-Python
pip install -e .Etapa 2: Importe as classes necessárias
from aspose_html.dom import Document
from aspose_html.cssom import CSSStyleSheetEtapa 3: Prepare um documento estilizado
Layout consome estilos computados, portanto construa e estilize a árvore primeiro:
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"))Etapa 4: Derivar a Árvore de Caixas
build_box_tree() produz um BoxRoot de BoxNode entradas, classificando o modelo de exibição de cada elemento com classify_display() contra a enumeração Display; ComputedStyle e EdgeSizes carregam estilo por caixa e medições do modelo de caixa.
Etapa 5: Executar Layout e Paginar
layout_block_tree() gera um FragmentRoot de geometria BlockFragment; conteúdo em linha se reúne em linhas LineFragment via layout_inline_fragments(); paginate_fragments() divide os resultados em PageFragment páginas respeitando BreakHints.
Problemas Comuns e Soluções
A saída de layout está vazia. A árvore de entrada não tinha conteúdo estilizado — anexe folhas de estilo e conteúdo antes do layout.
Uma caixa tem uma classificação de exibição inesperada. Check classify_display() para o elemento; o calculado display valor o impulsiona.
Quebras de página ocorrem em lugares estranhos. Provide BreakHints to paginate_fragments() para orientar oportunidades de quebra.
Perguntas Frequentes
Qual é a diferença entre caixas e fragmentos?
Caixas (BoxNode) descrevem a estrutura de layout derivada de estilos; fragmentos (BlockFragment, LineFragment, PageFragment) são resultados posicionados com geometria.
Onde as margens e o padding são resolvidos?
Em EdgeSizes em cada caixa — o primeiro lugar a procurar quando as dimensões te surpreendem.
O motor modela o texto?
O conteúdo inline é moldado em ShapedRun peças antes da montagem da linha.