Hoe te werken met de Layout Engine in Python
De layoutlaag van Aspose.HTML FOSS voor Python berekent geometrie uit gestileerde documenten: build_box_tree() bepaalt de boxstructuur, layout_block_tree() plaatst blokfragmenten, en paginate_fragments() splitst de output in pagina’s. Deze gids bereidt een gestileerd document — de vereiste invoer — voor en legt elke layoutfase uit, met gebruik van pip voor installatie.
Stapsgewijze gids
Stap 1: Installeer het pakket
git clone https://github.com/aspose-html-foss/Aspose.HTML-FOSS-for-Python.git
cd Aspose.HTML-FOSS-for-Python
pip install -e .Stap 2: Importeer vereiste klassen
from aspose_html.dom import Document
from aspose_html.cssom import CSSStyleSheetStap 3: Bereid een gestileerd document voor
Layout gebruikt berekende stijlen, dus bouw en style de boom eerst:
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"))Stap 4: Bepaal de Boxboom
build_box_tree() produceert een BoxRoot van BoxNode items, waarbij elk element’s weergavemodel wordt geclassificeerd met classify_display() tegen de Display enumeratie; ComputedStyle en EdgeSizes dragen per-box stijl- en box-modelmetingen.
Stap 5: Voer Layout uit en pagineer
layout_block_tree() levert een FragmentRoot van BlockFragment geometrie; inline-inhoud wordt samengevoegd tot LineFragment regels via layout_inline_fragments(); paginate_fragments() splitst resultaten in PageFragment pagina’s met inachtneming van BreakHints.
Veelvoorkomende problemen en oplossingen
Lay-outoutput is leeg. De invoerboom had geen gestylede inhoud — voeg stijlsheets en inhoud toe vóór de lay-out.
Een box heeft een onverwachte displayclassificatie. Check classify_display() voor het element; de berekende display waarde drijft het.
Pagina-eindes komen op vreemde plekken terecht. Provide BreakHints to paginate_fragments() om brekmogelijkheden te begeleiden.
Veelgestelde vragen
Wat is het verschil tussen boxes en fragments?
Boxes (BoxNode) beschrijven de lay-outstructuur afgeleid van stijlen; fragments (BlockFragment, LineFragment, PageFragment) zijn gepositioneerde resultaten met geometrie.
Waar lossen marges en padding op?
In EdgeSizes op elke box — de eerste plek om te kijken wanneer dimensies je verrassen.
Vormt de engine tekst?
Inline-inhoud wordt gevormd tot ShapedRun stukken vóór het samenstellen van de regel.