Comment travailler avec le moteur de mise en page dans Python
La couche de mise en page de Aspose.HTML FOSS pour Python calcule la géométrie à partir de documents stylisés : build_box_tree() dérive la structure de boîtes, layout_block_tree() place les fragments de blocs, et paginate_fragments() divise la sortie en pages. Ce guide prépare un document stylisé — l’entrée requise — et explique chaque étape de la mise en page, en utilisant pip pour l’installation.
Guide étape par étape
Étape 1: Installer le package
git clone https://github.com/aspose-html-foss/Aspose.HTML-FOSS-for-Python.git
cd Aspose.HTML-FOSS-for-Python
pip install -e .Étape 2: Importer les classes requises
from aspose_html.dom import Document
from aspose_html.cssom import CSSStyleSheetÉtape 3: Préparer un document stylisé
La mise en page consomme les styles calculés, il faut donc construire et styliser l’arbre d’abord:
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"))Étape 4: Dériver l’arbre de boîtes
build_box_tree() produit un BoxRoot de BoxNode entrées, classifiant le modèle d’affichage de chaque élément avec classify_display() par rapport à l’énumération Display; ComputedStyle et EdgeSizes transportent les styles par boîte et les mesures du modèle de boîte.
Étape 5: Exécuter la mise en page et paginer
layout_block_tree() produit un FragmentRoot de géométrie BlockFragment; le contenu en ligne s’assemble en LineFragment lignes via layout_inline_fragments(); paginate_fragments() divise les résultats en PageFragment pages en respectant BreakHints.
Problèmes courants et solutions
La sortie de la mise en page est vide. L’arbre d’entrée ne contenait aucun contenu stylisé — ajoutez les feuilles de style et le contenu avant la mise en page.
Une boîte possède une classification d’affichage inattendue. Check classify_display() pour l’élément ; la valeur calculée display cette valeur la pilote.
Les sauts de page apparaissent à des endroits étranges. Provide BreakHints to paginate_fragments() pour guider les opportunités de saut.
Foire aux questions
Quelle est la différence entre les boîtes et les fragments?
Les boîtes (BoxNode) décrivent la structure de mise en page dérivée des styles; les fragments (BlockFragment, LineFragment, PageFragment) sont des résultats placés avec géométrie.
Où les marges et le padding se résolvent-ils?
Dans EdgeSizes sur chaque boîte — le premier endroit à vérifier lorsque les dimensions vous surprennent.
Le moteur façonne-t-il le texte?
Le contenu en ligne est façonné en ShapedRun morceaux avant l’assemblage des lignes.