Moteur de mise en page
Moteur de mise en page
La couche de mise en page transforme un DOM stylisé en géométrie: un arbre de boîtes, puis des fragments avec des tailles et des positions. C’est l’étape qui suit les styles calculés, et ses sorties sont de simples objets Python que vous pouvez inspecter.
Du DOM à l’arbre de boîtes
build_box_tree() produit un BoxRoot de BoxNode entrées à partir d’un document stylisé, classifiant le modèle d’affichage de chaque élément via classify_display() par rapport à l’énumération Display. ComputedStyle et EdgeSizes portent le style par boîte et les mesures du modèle de boîte.
Mise en page de blocs
layout_block_tree() effectue la mise en page au niveau des blocs sur l’arbre de boîtes, produisant un FragmentRoot contenant BlockFragment entrées avec une géométrie résolue.
Mise en page en ligne
Le contenu en ligne est façonné en pièces ShapedRun et InlineTextFragment, assemblées en lignes LineFragment via layout_inline_fragments() et flush_inline_run().
Pagination
paginate_fragments() divise la sortie des fragments en PageFragment pages, en respectant BreakHints, avec PageMarginBoxes qui modèle les zones de marge de page et flush_page() qui finalise chaque page.
Conseils et meilleures pratiques
- Résolvez les styles calculés avant la mise en page — l’arbre de boîtes provient des éléments stylisés
- Inspectez
EdgeSizeslorsque les dimensions des boîtes semblent incorrectes; les marges et le remplissage s’y résolvent - Gardez l’arbre de boîtes et l’arbre de fragments distincts dans votre modèle mental: les boîtes décrivent la structure, les fragments décrivent la géométrie placée
Problèmes courants
| Problème | Cause | Correction |
|---|---|---|
| Sortie de fragment vide | Exécution de la mise en page sur un arbre non stylisé ou vide | Attachez d’abord les feuilles de style et le contenu |
| Classification d’affichage inattendue | Le display calculé de l’élément diffère de l’hypothèse | Vérifiez le résultat classify_display() pour la boîte |
| Sauts de page à des endroits inhabituels | Indices de rupture non définis | Fournir BreakHints à paginate_fragments() |
FAQ
Quelle est la différence entre une boîte et un fragment?
Les boîtes (BoxNode) décrivent la structure de mise en page dérivée des styles; les fragments (BlockFragment, LineFragment) sont les résultats placés avec la géométrie.
Le moteur gère-t-il la pagination?
Oui — paginate_fragments() produit PageFragment pages avec des boîtes de marge.
D’où proviennent les séquences de texte?
Le contenu en ligne est façonné en objets ShapedRun et assemblé en lignes LineFragment.
API Reference Résumé
| Classe/Méthode | Description |
|---|---|
build_box_tree | Dérivez l’arbre de boîtes à partir d’un DOM stylisé |
layout_block_tree | Exécuter la mise en page des blocs sur l’arbre de boîtes |
layout_inline_fragments | Assembler le contenu en ligne en lignes |
paginate_fragments | Diviser les fragments en pages |
BoxNode | Une boîte dans la structure de mise en page |
PageFragment | Une page mise en page |