Cum să lucrați cu motorul de layout în Python

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 CSSStyleSheet

Pasul 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.

Vezi și:

 Română