Come lavorare con il Layout Engine in Python
Lo strato di layout di Aspose.HTML FOSS per Python calcola la geometria da documenti stilizzati: build_box_tree() deriva la struttura a riquadri, layout_block_tree() posiziona i frammenti di blocco, e paginate_fragments() divide l’output in pagine. Questa guida prepara un documento stilizzato — l’input richiesto — e spiega ogni fase di layout, usando pip per l’installazione.
Guida passo-passo
Passo 1: Installa il Pacchetto
git clone https://github.com/aspose-html-foss/Aspose.HTML-FOSS-for-Python.git
cd Aspose.HTML-FOSS-for-Python
pip install -e .Passo 2: Importa le Classi Necessarie
from aspose_html.dom import Document
from aspose_html.cssom import CSSStyleSheetPasso 3: Prepara un Documento Stilizzato
Il layout utilizza gli stili calcolati, quindi costruisci e applica gli stili all’albero per primo:
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"))Passo 4: Deriva l’albero dei box
build_box_tree() produce un BoxRoot di BoxNode voci, classificando il modello di visualizzazione di ogni elemento con classify_display() rispetto all’enumerazione Display; ComputedStyle e EdgeSizes contengono lo stile per-box e le misurazioni del modello di box.
Passo 5: Esegui il layout e pagina
layout_block_tree() produce un FragmentRoot di geometria BlockFragment; il contenuto in linea si assembla in LineFragment linee tramite layout_inline_fragments(); paginate_fragments() suddivide i risultati in PageFragment pagine rispettando BreakHints.
Problemi comuni e soluzioni
L’output del layout è vuoto. L’albero di input non conteneva contenuti stilizzati — allega i fogli di stile e i contenuti prima del layout.
Una casella ha una classificazione di visualizzazione inattesa. Check classify_display() per l’elemento; il calcolato display il valore lo guida.
Le interruzioni di pagina si trovano in punti strani. Provide BreakHints to paginate_fragments() per guidare le opportunità di interruzione.
Domande frequenti
Qual è la differenza tra caselle e frammenti?
Le caselle (BoxNode) descrivono la struttura di layout derivata dagli stili; i frammenti (BlockFragment, LineFragment, PageFragment) sono risultati posizionati con geometria.
Dove si risolvono i margini e il padding?
In EdgeSizes su ogni casella — il primo posto da controllare quando le dimensioni ti sorprendono.
Il motore modella il testo?
Il contenuto inline viene modellato in ShapedRun pezzi prima dell’assemblaggio della riga.