Cómo trabajar con el motor de diseño en Python
La capa de diseño de Aspose.HTML FOSS para Python calcula la geometría a partir de documentos con estilo: build_box_tree() deriva la estructura de cajas, layout_block_tree() coloca fragmentos de bloque y paginate_fragments() divide la salida en páginas. Esta guía prepara un documento con estilo — la entrada requerida — y explica cada etapa del diseño, usando pip para la instalación.
Guía paso a paso
Paso 1: Instalar el paquete
git clone https://github.com/aspose-html-foss/Aspose.HTML-FOSS-for-Python.git
cd Aspose.HTML-FOSS-for-Python
pip install -e .Paso 2: Importar las clases requeridas
from aspose_html.dom import Document
from aspose_html.cssom import CSSStyleSheetPaso 3: Preparar un documento con estilo
El diseño consume estilos computados, así que construye y aplica estilos al árbol primero:
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"))Paso 4: Derivar el árbol de cajas
build_box_tree() produce un BoxRoot de BoxNode entradas, clasificando el modelo de visualización de cada elemento con classify_display() contra la enumeración Display; ComputedStyle y EdgeSizes llevan estilo por caja y mediciones del modelo de caja.
Paso 5: Ejecutar el diseño y paginar
layout_block_tree() produce un FragmentRoot de geometría BlockFragment; el contenido en línea se ensambla en LineFragment líneas a través de layout_inline_fragments(); paginate_fragments() divide los resultados en PageFragment páginas respetando BreakHints.
Problemas comunes y soluciones
La salida del diseño está vacía. El árbol de entrada no tenía contenido con estilo — adjunte hojas de estilo y contenido antes del diseño.
Una caja tiene una clasificación de visualización inesperada. Check classify_display() para el elemento; el calculado display valor lo impulsa.
Los saltos de página aparecen en lugares extraños. Provide BreakHints to paginate_fragments() para guiar oportunidades de salto.
Preguntas frecuentes
¿Cuál es la diferencia entre cajas y fragmentos?
Las cajas (BoxNode) describen la estructura de diseño derivada de los estilos; los fragmentos (BlockFragment, LineFragment, PageFragment) son resultados colocados con geometría.
¿Dónde se resuelven los márgenes y el relleno?
En EdgeSizes de cada caja — el primer lugar a consultar cuando las dimensiones te sorprenden.
¿El motor da forma al texto?
El contenido en línea se forma en ShapedRun piezas antes del ensamblaje de la línea.