Accept
Contenuti
[
Nascondere
]HeaderFooter.Accept method
Accetta un visitatore.
public override bool Accept(DocumentVisitor visitor)
Parametro | Tipo | Descrizione |
---|---|---|
visitor | DocumentVisitor | Il visitatore che visiterà i nodi. |
Valore di ritorno
Vero se tutti i nodi sono stati visitati; falso seDocumentVisitor
ha interrotto l’operazione prima di visitare tutti i nodi.
Osservazioni
Enumera questo nodo e tutti i relativi figli. Ogni nodo chiama un metodo corrispondenteDocumentVisitor
.
Per maggiori informazioni vedere il modello di progettazione Visitor.
ChiamateVisitHeaderFooterStart
, poi chiamaAccept
per tutti i nodi figlio della sezione e chiamateVisitHeaderFooterEnd
alla fine.
Esempi
Mostra come stampare la struttura dei nodi di ogni intestazione e piè di pagina in un documento.
public void HeaderFooterToText()
{
Document doc = new Document(MyDir + "DocumentVisitor-compatible features.docx");
HeaderFooterStructurePrinter visitor = new HeaderFooterStructurePrinter();
// Quando facciamo in modo che un nodo composito accetti un visitatore del documento, il visitatore visita il nodo accettante,
// e poi attraversa tutti i figli del nodo in modo approfondito.
// Il visitatore può leggere e modificare ogni nodo visitato.
doc.Accept(visitor);
Console.WriteLine(visitor.GetText());
// Un modo alternativo per accedere all'intestazione/piè di pagina di un documento sezione per sezione è accedere alla raccolta.
HeaderFooter[] headerFooters = doc.FirstSection.HeadersFooters.ToArray();
Assert.AreEqual(3, headerFooters.Length);
}
/// <summary>
/// Attraversa l'albero non binario dei nodi figlio di un nodo.
/// Crea una mappa sotto forma di una stringa di tutti i nodi HeaderFooter incontrati e dei relativi figli.
/// </summary>
public class HeaderFooterStructurePrinter : DocumentVisitor
{
public HeaderFooterStructurePrinter()
{
mBuilder = new StringBuilder();
mVisitorIsInsideHeaderFooter = false;
}
public string GetText()
{
return mBuilder.ToString();
}
/// <summary>
/// Chiamato quando nel documento viene incontrato un nodo Esegui.
/// </summary>
public override VisitorAction VisitRun(Run run)
{
if (mVisitorIsInsideHeaderFooter) IndentAndAppendLine("[Run] \"" + run.GetText() + "\"");
return VisitorAction.Continue;
}
/// <summary>
/// Chiamato quando nel documento viene incontrato un nodo HeaderFooter.
/// </summary>
public override VisitorAction VisitHeaderFooterStart(HeaderFooter headerFooter)
{
IndentAndAppendLine("[HeaderFooter start] HeaderFooterType: " + headerFooter.HeaderFooterType);
mDocTraversalDepth++;
mVisitorIsInsideHeaderFooter = true;
return VisitorAction.Continue;
}
/// <summary>
/// Chiamato dopo che tutti i nodi figli di un nodo HeaderFooter sono stati visitati.
/// </summary>
public override VisitorAction VisitHeaderFooterEnd(HeaderFooter headerFooter)
{
mDocTraversalDepth--;
IndentAndAppendLine("[HeaderFooter end]");
mVisitorIsInsideHeaderFooter = false;
return VisitorAction.Continue;
}
/// <summary>
/// Aggiunge una riga allo StringBuilder e la rientra in base alla profondità con cui si trova il visitatore nell'albero del documento.
/// </summary>
/// <param name="text"></param>
private void IndentAndAppendLine(string text)
{
for (int i = 0; i < mDocTraversalDepth; i++) mBuilder.Append("| ");
mBuilder.AppendLine(text);
}
private bool mVisitorIsInsideHeaderFooter;
private int mDocTraversalDepth;
private readonly StringBuilder mBuilder;
}
Guarda anche
- class DocumentVisitor
- class HeaderFooter
- spazio dei nomi Aspose.Words
- assemblea Aspose.Words