DocumentVisitorVisitParagraphEnd Method |
Namespace: Aspose.Words
public void DocStructureToText() { // Open the document that has nodes we want to print the info of Document doc = new Document(MyDir + "DocumentVisitor-compatible features.docx"); // Create an object that inherits from the DocumentVisitor class DocStructurePrinter visitor = new DocStructurePrinter(); // Accepting a visitor lets it start traversing the nodes in the document, // starting with the node that accepted it to then recursively visit every child doc.Accept(visitor); // Once the visiting is complete, we can retrieve the result of the operation, // that in this example, has accumulated in the visitor Console.WriteLine(visitor.GetText()); } /// <summary> /// This Visitor implementation prints information about sections, bodies, paragraphs and runs encountered in the document. /// </summary> public class DocStructurePrinter : DocumentVisitor { public DocStructurePrinter() { mBuilder = new StringBuilder(); } /// <summary> /// Gets the plain text of the document that was accumulated by the visitor. /// </summary> public string GetText() { return mBuilder.ToString(); } /// <summary> /// Called when a Document node is encountered. /// </summary> public override VisitorAction VisitDocumentStart(Document doc) { int childNodeCount = doc.GetChildNodes(NodeType.Any, true).Count; // A Document node is at the root of every document, so if we let a document accept a visitor, this will be the first visitor action to be carried out IndentAndAppendLine("[Document start] Child nodes: " + childNodeCount); mDocTraversalDepth++; // Let the visitor continue visiting other nodes return VisitorAction.Continue; } /// <summary> /// Called when the visiting of a Document is ended. /// </summary> public override VisitorAction VisitDocumentEnd(Document doc) { // If we let a document accept a visitor, this will be the last visitor action to be carried out mDocTraversalDepth--; IndentAndAppendLine("[Document end]"); return VisitorAction.Continue; } /// <summary> /// Called when a Section node is encountered in the document. /// </summary> public override VisitorAction VisitSectionStart(Section section) { // Get the index of our section within the document NodeCollection docSections = section.Document.GetChildNodes(NodeType.Section, false); int sectionIndex = docSections.IndexOf(section); IndentAndAppendLine("[Section start] Section index: " + sectionIndex); mDocTraversalDepth++; return VisitorAction.Continue; } /// <summary> /// Called when the visiting of a Section node is ended. /// </summary> public override VisitorAction VisitSectionEnd(Section section) { mDocTraversalDepth--; IndentAndAppendLine("[Section end]"); return VisitorAction.Continue; } /// <summary> /// Called when a Body node is encountered in the document. /// </summary> public override VisitorAction VisitBodyStart(Body body) { int paragraphCount = body.Paragraphs.Count; IndentAndAppendLine("[Body start] Paragraphs: " + paragraphCount); mDocTraversalDepth++; return VisitorAction.Continue; } /// <summary> /// Called when the visiting of a Body node is ended. /// </summary> public override VisitorAction VisitBodyEnd(Body body) { mDocTraversalDepth--; IndentAndAppendLine("[Body end]"); return VisitorAction.Continue; } /// <summary> /// Called when a Paragraph node is encountered in the document. /// </summary> public override VisitorAction VisitParagraphStart(Paragraph paragraph) { IndentAndAppendLine("[Paragraph start]"); mDocTraversalDepth++; return VisitorAction.Continue; } /// <summary> /// Called when the visiting of a Paragraph node is ended. /// </summary> public override VisitorAction VisitParagraphEnd(Paragraph paragraph) { mDocTraversalDepth--; IndentAndAppendLine("[Paragraph end]"); return VisitorAction.Continue; } /// <summary> /// Called when a Run node is encountered in the document. /// </summary> public override VisitorAction VisitRun(Run run) { IndentAndAppendLine("[Run] \"" + run.GetText() + "\""); return VisitorAction.Continue; } /// <summary> /// Called when a SubDocument node is encountered in the document. /// </summary> public override VisitorAction VisitSubDocument(SubDocument subDocument) { IndentAndAppendLine("[SubDocument]"); return VisitorAction.Continue; } /// <summary> /// Append a line to the StringBuilder and indent it depending on how deep the visitor is into the document tree. /// </summary> /// <param name="text"></param> private void IndentAndAppendLine(string text) { for (int i = 0; i < mDocTraversalDepth; i++) mBuilder.Append("| "); mBuilder.AppendLine(text); } private int mDocTraversalDepth; private readonly StringBuilder mBuilder; }