LayoutCollector

LayoutCollector class

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

Per saperne di più, visita ilConversione nel 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 è allegata 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 in base 1 della pagina in cui termina il nodo. Restituisce 0 se il nodo non può essere mappato su una pagina.
GetEntity(Node)Restituisce una posizione opaca delLayoutEnumerator che corrisponde al nodo specificato. È possibile utilizzare il valore restituito come argomentoCurrent dato che il documento in corso enumerato e il documento del nodo sono gli stessi.
GetNumPagesSpanned(Node)Ottiene il numero di pagine su cui si estende il nodo specificato. 0 se il nodo si trova all’interno di una singola pagina. È uguale aGetEndPageIndex -GetStartPageIndex .
GetStartPageIndex(Node)Ottiene l’indice in base 1 della pagina in cui inizia il nodo. Restituisce 0 se il nodo non può essere mappato su una pagina.

Osservazioni

Quando crei un fileLayoutCollector e specificare aDocument oggetto documento a cui allegare, il raccoglitore registrerà la mappatura dei nodi del documento sugli oggetti del layout quando il documento viene formattato in pagine.

Potrai scoprire in quale pagina si trova un particolare nodo del documento (es. sequenza, paragrafo o cella di tabella) utilizzando il comandoGetStartPageIndex ,GetEndPageIndex EGetNumPagesSpannedmetodi. Questi metodi creano automaticamente il modello di layout della pagina del documento e aggiornano i campi, se necessario.

Quando non è più necessario raccogliere informazioni sul layout, è meglio impostare il fileDocument proprietà anullo per evitare la raccolta non necessaria di più 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 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));

// Compila 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 raccoglitore di layout, dobbiamo chiamare il metodo "UpdatePageLayout" per darci
// una cifra precisa per qualsiasi metrica relativa al layout, come il conteggio delle 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 qualsiasi nodo e la loro estensione complessiva delle pagine.
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à del 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 anche applicarlo all'entità di layout corrispondente di qualsiasi nodo.
layoutEnumerator.Current = layoutCollector.GetEntity(doc.GetChild(NodeType.Paragraph, 1, true));

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

Guarda anche