Cum să lucrați cu motorul de layout în Python
Stratul de aranjare al Aspose.HTML FOSS pentru Python calculează geometria din documente stilizate: build_box_tree() derivă structura de cutii, layout_block_tree() plasează fragmentele de bloc și paginate_fragments() împarte ieșirea în pagini. Acest ghid pregătește un document stilizat — intrarea necesară — și explică fiecare etapă de aranjare, utilizând pip pentru instalare.
Ghid pas cu pas
Pasul 1: Instalaţi pachetul
git clone https://github.com/aspose-html-foss/Aspose.HTML-FOSS-for-Python.git
cd Aspose.HTML-FOSS-for-Python
pip install -e .Pasul 2: Importaţi clasele necesare
from aspose_html.dom import Document
from aspose_html.cssom import CSSStyleSheetPasul 3: Pregătiţi un document stilizat
Layout consumă stilurile calculate, așa că construiește și stilizează arborele mai întâi:
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"))Pasul 4: Derivează arborele de cutii
build_box_tree() produce un BoxRoot de BoxNode intrări, clasificând modelul de afișare al fiecărui element cu classify_display() față de enumerarea Display; ComputedStyle și EdgeSizes conțin stilul per-cutie și măsurătorile modelului de cutie.
Pasul 5: Rulează Layout și paginează
layout_block_tree() produce un FragmentRoot de geometrie BlockFragment; conținutul în linie se asamblează în linii LineFragment prin layout_inline_fragments(); paginate_fragments() împarte rezultatele în pagini PageFragment respectând BreakHints.
Probleme comune și soluții
Ieșirea de layout este goală. Arborele de intrare nu conținea conținut stilizat — atașați foile de stil și conținutul înainte de layout.
Un box are o clasificare de afișare neașteptată. Check classify_display() pentru element; calculată display valoarea o conduce.
Întreruperile de pagină apar în locuri ciudate. Provide BreakHints to paginate_fragments() pentru a ghida oportunitățile de întrerupere.
Întrebări frecvente
Care este diferența dintre cutii și fragmente?
Cutii (BoxNode) descriu structura de aspect derivată din stiluri; fragmente (BlockFragment, LineFragment, PageFragment) sunt rezultate plasate cu geometrie.
Unde se rezolvă marginile și spațierea internă?
În EdgeSizes pe fiecare cutie — primul loc de verificat când dimensiunile vă surprind.
Motorul modelează textul?
Conținutul inline este modelat în ShapedRun piese înainte de asamblarea liniei.