Wie man mit der Layout-Engine in Python arbeitet
Die Layout-Schicht von Aspose.HTML FOSS für Python berechnet Geometrie aus gestalteten Dokumenten: build_box_tree() leitet die Box-Struktur ab, layout_block_tree() platziert Blockfragmente und paginate_fragments() teilt die Ausgabe in Seiten auf. Dieser Leitfaden erstellt ein gestaltetes Dokument — die erforderliche Eingabe — und erklärt jede Layout-Phase, wobei pip für die Installation verwendet wird.
Schritt-für-Schritt-Anleitung
Schritt 1: Paket installieren
git clone https://github.com/aspose-html-foss/Aspose.HTML-FOSS-for-Python.git
cd Aspose.HTML-FOSS-for-Python
pip install -e .Schritt 2: Erforderliche Klassen importieren
from aspose_html.dom import Document
from aspose_html.cssom import CSSStyleSheetSchritt 3: Ein gestaltetes Dokument vorbereiten
Layout verbraucht berechnete Stile, also erstelle und style den Baum zuerst:
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"))Schritt 4: Boxbaum ableiten
build_box_tree() erzeugt ein BoxRoot von BoxNode Einträgen, das jedes Element-Display-Modell mit classify_display() gegenüber der Display Aufzählung klassifiziert; ComputedStyle und EdgeSizes tragen pro-Box Stil- und Box-Modell-Messungen.
Schritt 5: Layout ausführen und paginieren
layout_block_tree() liefert ein FragmentRoot von BlockFragment Geometrie; Inline-Inhalt assembliert zu LineFragment Zeilen via layout_inline_fragments(); paginate_fragments() teilt Ergebnisse in PageFragment Seiten unter Berücksichtigung von BreakHints.
Häufige Probleme und Lösungen
Layout-Ausgabe ist leer. Der Eingabebaum enthielt keinen gestylten Inhalt — fügen Sie Stylesheets und Inhalt vor dem Layout hinzu.
Eine Box hat eine unerwartete Display-Klassifizierung. Check classify_display() für das Element; das berechnete display Wert steuert es.
Page breaks landen an seltsamen Stellen. Provide BreakHints to paginate_fragments() um break opportunities zu leiten.
Häufig gestellte Fragen
Was ist der Unterschied zwischen Boxen und Fragmenten?
Boxen (BoxNode) beschreiben die aus Stilregeln abgeleitete Layoutstruktur; Fragmente (BlockFragment, LineFragment, PageFragment) sind platzierte Ergebnisse mit Geometrie.
Wo werden Margin und Padding aufgelöst?
In EdgeSizes bei jeder Box — die erste Anlaufstelle, wenn Dimensionen Sie überraschen.
Formt die Engine den Text?
Inline-Inhalt wird in ShapedRun Stücke geformt, bevor die Zeile zusammengesetzt wird.