LayoutCollector

LayoutCollector class

Questa classe consente di calcolare i numeri di pagina dei nodi del documento.

Per saperne di più, visita ilConversione in formato a pagina fissa articolo di documentazione.

public class LayoutCollector

Costruttori

NomeDescrizione
LayoutCollector(Document)Inizializza un’istanza di questa classe.

Proprietà

NomeDescrizione
Document { get; set; }Ottiene o imposta il documento a cui è associata questa istanza del raccoglitore.

Metodi

NomeDescrizione
Clear()Cancella tutti i dati di layout raccolti. Chiama questo metodo dopo che il documento è stato aggiornato manualmente o il layout è stato ricostruito.
GetEndPageIndex(Node)Ottiene l’indice a partire da 1 della pagina in cui termina il nodo. Restituisce 0 se il nodo non può essere mappato a una pagina.
GetEntity(Node)Restituisce una posizione opaca delLayoutEnumerator che corrisponde al nodo specificato. È possibile utilizzare il valore restituito come argomento perCurrent dato che il documento che viene enumerato e il documento del nodo sono gli stessi.
GetNumPagesSpanned(Node)Ottiene il numero di pagine che il nodo specificato occupa. 0 se il nodo è all’interno di una singola pagina. È lo stesso diGetEndPageIndex -GetStartPageIndex .
GetStartPageIndex(Node)Ottiene l’indice a partire da 1 della pagina in cui inizia il nodo. Restituisce 0 se il nodo non può essere mappato a una pagina.

Osservazioni

Quando crei unLayoutCollector e specificare unDocumentoggetto documento a cui allegare, il raccoglitore registrerà la mappatura dei nodi del documento sugli oggetti di layout quando il documento viene formattato in pagine.

Sarà possibile scoprire in quale pagina si trova un particolare nodo del documento (ad esempio, una sequenza, un paragrafo o una cella di tabella) utilizzando ilGetStartPageIndex ,GetEndPageIndex EGetNumPagesSpanned metodi. Questi metodi creano automaticamente il modello di layout di pagina del documento e aggiornano i campi se necessario.

Quando non è più necessario raccogliere informazioni sul layout, è meglio impostareDocument proprietà anull per evitare l’inutile raccolta di ulteriori mappature di layout.

Esempi

Mostra come visualizzare gli intervalli di pagine su cui si estende un nodo.

Document doc = new Document();
LayoutCollector layoutCollector = new LayoutCollector(doc);

// Chiama il metodo "GetNumPagesSpanned" per contare su quante pagine si estende il contenuto del nostro documento.
// Poiché il documento è vuoto, il numero di pagine è attualmente zero.
Assert.AreEqual(doc, layoutCollector.Document);
Assert.AreEqual(0, layoutCollector.GetNumPagesSpanned(doc));

// Popola il documento con 5 pagine di contenuto.
DocumentBuilder builder = new DocumentBuilder(doc);
builder.Write("Section 1");
builder.InsertBreak(BreakType.PageBreak);
builder.InsertBreak(BreakType.PageBreak);
builder.InsertBreak(BreakType.SectionBreakEvenPage);
builder.Write("Section 2");
builder.InsertBreak(BreakType.PageBreak);
builder.InsertBreak(BreakType.PageBreak);

// Prima del layout collector, dobbiamo chiamare il metodo "UpdatePageLayout" per fornirci
// un valore preciso per qualsiasi metrica correlata al layout, come il numero di pagine.
Assert.AreEqual(0, layoutCollector.GetNumPagesSpanned(doc));

layoutCollector.Clear();
doc.UpdatePageLayout();

Assert.AreEqual(5, layoutCollector.GetNumPagesSpanned(doc));

// Possiamo vedere i numeri delle pagine iniziali e finali di ogni nodo e la loro estensione complessiva di pagina.
NodeCollection nodes = doc.GetChildNodes(NodeType.Any, true);
foreach (Node node in nodes)
{
    Console.WriteLine($"->  NodeType.{node.NodeType}: ");
    Console.WriteLine(
        $"\tStarts on page {layoutCollector.GetStartPageIndex(node)}, ends on page {layoutCollector.GetEndPageIndex(node)}," +
        $" spanning {layoutCollector.GetNumPagesSpanned(node)} pages.");
}

// Possiamo scorrere le entità di layout utilizzando un LayoutEnumerator.
LayoutEnumerator layoutEnumerator = new LayoutEnumerator(doc);

Assert.AreEqual(LayoutEntityType.Page, layoutEnumerator.Type);

// LayoutEnumerator può attraversare la raccolta di entità di layout come un albero.
// Possiamo applicarlo anche a qualsiasi entità layout corrispondente a un nodo.
layoutEnumerator.Current = layoutCollector.GetEntity(doc.GetChild(NodeType.Paragraph, 1, true));

Assert.AreEqual(LayoutEntityType.Span, layoutEnumerator.Type);
Assert.AreEqual("¶", layoutEnumerator.Text);

Guarda anche