Hogyan dolgozzunk a Layout Engine-el a Python-ban
A Aspose.HTML FOSS Python számára szánt elrendezési rétege a stílusos dokumentumokból számítja ki a geometriát: build_box_tree() állítja elő a dobozstruktúrát, layout_block_tree() helyezi el a blokkrészleteket, és paginate_fragments() oldalakra bontja a kimenetet. Ez az útmutató elkészíti a stílusos dokumentumot — a szükséges bemenetet — és részletezi az egyes elrendezési szakaszokat, a telepítéshez a pip használatával.
Lépésről-lépésre útmutató
1. lépés: A csomag telepítése
git clone https://github.com/aspose-html-foss/Aspose.HTML-FOSS-for-Python.git
cd Aspose.HTML-FOSS-for-Python
pip install -e .2. lépés: A szükséges osztályok importálása
from aspose_html.dom import Document
from aspose_html.cssom import CSSStyleSheet3. lépés: Stílusos dokumentum előkészítése
A layout felhasználja a kiszámított stílusokat, ezért először építsd fel és alkalmazd a stílusokat a fán:
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"))4. lépés: A dobozfa meghatározása
build_box_tree() egy BoxRoot-t hoz létre BoxNode bejegyzésből, minden elem megjelenítési modelljét classify_display() segítségével a Display felsorolás ellenőrzésével osztályozza; a ComputedStyle és a EdgeSizes dobozonkénti stílus- és dobozmodell-méréseket tartalmaznak.
5. lépés: Layout futtatása és oldalszámozás
layout_block_tree() egy FragmentRoot-t ad BlockFragment geometriából; a beágyazott tartalom LineFragment sorokká áll össze a layout_inline_fragments() segítségével; a paginate_fragments() a végeredményt PageFragment oldalra osztja, tiszteletben tartva a BreakHints-t.
Gyakori problémák és megoldások
A layout kimenete üres. A bemeneti fa nem tartalmazott stílusos tartalmat — csatolj stíluslapokat és tartalmat a layout előtt.
A box váratlan megjelenítési osztályt kap. Check classify_display() az elementhez; a kiszámított display Az érték hajtja.
Az oldaltörések furcsa helyeken jelennek meg. Provide BreakHints to paginate_fragments() a törési lehetőségek irányításához.
Gyakran Ismételt Kérdések
Mi a különbség a dobozok és a fragmentumok között?
A dobozok (BoxNode) leírják a stílusokból származó elrendezési struktúrát; a fragmentumok (BlockFragment, LineFragment, PageFragment) elhelyezett eredmények geometriával.
Hol oldódnak fel a margók és a kitöltés?
A EdgeSizes minden dobozban — az első hely, ahová érdemes nézni, ha a méretek meglepnek.
Alakítja-e a motor a szöveget?
A beágyazott tartalom ShapedRun darabra formálódik a sor összeállítása előtt.