Salta ai contenuti
getnextpdf.com

Pro edizione

Layout a flusso

NextPDF Pro posiziona una sequenza di elementi a flusso — testo, immagini, tabelle, spaziatori — sulle pagine, assegnando a ciascuno una pagina e una posizione concrete. Il comportamento di interruzione di pagina è selezionabile: greedy, con evitamento degli orfani o keep-together.

Questa funzionalità è fornita in NextPDF Pro (nextpdf/pro) e si attiva con un envelope di licenza di livello Pro. Un deployment privo di tale entitlement non carica le classi della funzionalità. Non esiste un flag di licenza separato per singola funzionalità; è l’envelope Pro ad abilitarla. Confronta le edizioni e ottieni una licenza.

Terminal window
composer require nextpdf/pro:^3

Il motore di layout in streaming prende un elenco di elementi a flusso e una regione di contenuto, quindi percorre gli elementi in ordine e assegna a ciascuno una pagina e una posizione. Quando un elemento non entra nello spazio verticale rimanente, il motore avvia una nuova pagina secondo la strategia configurata:

  • StreamingLayoutEngine — il motore. Costruito con una LayoutRegion (l’area di contenuto per pagina) e una PageBreakStrategy. Restituisce un LayoutResult di elementi posizionati.
  • FlowElement / FlowElementType — il modello degli elementi. Testo e tabelle possono interrompersi tra le pagine; il motore posiziona immagini e spaziatori in modo atomico.
  • PageBreakStrategy — un’enumerazione con tre comportamenti:
    • Greedy — interrompe non appena l’elemento successivo non entra.
    • AvoidOrphans — interrompe in anticipo quando rimane solo una piccola quantità di spazio, per evitare di lasciare un singolo elemento in cima a una nuova pagina.
    • KeepTogether — rispetta il flag keep-with-next, così che gli elementi accoppiati restino sulla stessa pagina quando possibile.

Flow Layout è un motore di posizionamento di elementi. Calcola le assegnazioni di pagina e posizione; non è un motore di rendering di HTML o CSS. Per la conversione da HTML a PDF, usare la pipeline HTML del Core.

Il motore assegna a ogni elemento una pagina e una posizione in un’unica passata in avanti. Non bufferizza mai un intero albero di documento per rifluirlo successivamente. Ciò mantiene la memoria limitata per quanto lungo sia il documento e rende il costo lineare rispetto al numero di elementi. Ogni decisione di interruzione di pagina è un predicato locale sul cursore corrente e sulla strategia scelta. Quindi greedy, evitamento degli orfani e keep-together si risolvono tutti all’interno della stessa passata in streaming. Il compromesso è l’impegno in avanti: un elemento eccessivamente alto trabocca invece di riscalarsi, e keep-together vale solo quando entrambi gli elementi accoppiati condividono una pagina.

Contesto di progettazione: Generazione di documenti ad alto volume.

ClassResponsibility
StreamingLayoutEngineAssegnare pagine e posizioni agli elementi a flusso.
FlowElement, FlowElementTypeModello degli elementi ed enumerazione dei tipi.
LayoutRegionArea di contenuto per pagina.
PageBreakStrategyEnumerazione del comportamento di interruzione di pagina.
LayoutResult, PlacedElementOutput del posizionamento.
use NextPDF\Pro\FlowLayout\{StreamingLayoutEngine, LayoutRegion, PageBreakStrategy};
$engine = new StreamingLayoutEngine(
region: new LayoutRegion(/* x, y, width, height */),
strategy: PageBreakStrategy::AvoidOrphans,
);
$result = $engine->layout($elements);
$result = $engine->layout($elements);
foreach ($result->placements as $placed) {
$logger->debug('flow.placed', [
'page' => $placed->pageIndex,
'type' => $placed->element->type->value,
]);
}
  • Il motore posiziona comunque un elemento più alto della regione, ma può traboccare; dimensionare gli elementi entro l’altezza della regione.
  • KeepTogether mantiene le coppie unite solo quando entrambe entrano in una sola pagina.
  • AvoidOrphans riserva almeno due altezze di elemento prima di interrompere.

Il layout è lineare rispetto al numero di elementi. Il motore è in streaming: non conserva un albero di documento completo.

Flow Layout opera sui metadati degli elementi forniti dall’utente. Non esegue alcun I/O.

Flow Layout implementa il comportamento di posizionamento di NextPDF; non punta a uno standard di layout esterno.

  • StreamingLayoutEngine viene costruito con una LayoutRegion e una PageBreakStrategy e restituisce un LayoutResult di elementi posizionati con assegnazioni di pagina e posizione concrete.
  • PageBreakStrategy ha tre comportamenti: Greedy (interrompe quando l’elemento successivo non entra), AvoidOrphans (interrompe in anticipo, riservando almeno due altezze di elemento) e KeepTogether (rispetta keep-with-next, così che gli elementi accoppiati restino su una sola pagina quando entrambi entrano).
  • Testo e tabelle possono interrompersi tra le pagine; immagini e spaziatori vengono posizionati in modo atomico. Un elemento più alto della regione viene comunque posizionato ma può traboccare.
  • Il motore è in streaming: non conserva un albero di documento completo e non esegue alcun I/O.
  • Questo è un motore di posizionamento di elementi. Calcola le assegnazioni di pagina e posizione; non è un motore di rendering di HTML o CSS.

Enterprise non modifica il comportamento di Flow Layout. Enterprise aggiunge funzionalità di fascia superiore documentate separatamente; non sono richieste per usare il motore di posizionamento.

Non esiste alcun motore di posizionamento di elementi del Core con strategie di interruzione di pagina. Per il rendering da HTML a PDF, usare la pipeline HTML del Core open source. Vedere /modules/html/.

Questa pagina documenta solo il comportamento osservabile dall’esterno e la superficie API pubblica supportata. Percorsi di namespace interni, classi helper, tabelle dei meccanismi, nomi di file di runbook e prefissi di ticket sono fuori ambito.