Come lavorare con il Layout Engine in Python

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 CSSStyleSheet

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

Vedi anche

 Italiano