DocumentVisitor

DocumentVisitor class

Classe de base pour les visiteurs de documents personnalisés.

Pour en savoir plus, visitez leModèle d’objet de document (DOM) Aspose.Words article de documentation.

public abstract class DocumentVisitor

Méthodes

NomLa description
virtual VisitAbsolutePositionTab(AbsolutePositionTab)Appelé lorsqu’unAbsolutePositionTab le nœud est rencontré dans le document.
virtual VisitBodyEnd(Body)Appelé lorsque l’énumération de l’histoire du texte principal dans une section est terminée.
virtual VisitBodyStart(Body)Appelé lorsque l’énumération de l’histoire du texte principal dans une section a commencé.
virtual VisitBookmarkEnd(BookmarkEnd)Appelé lorsqu’une fin de signet est rencontrée dans le document.
virtual VisitBookmarkStart(BookmarkStart)Appelé lorsqu’un début de signet est rencontré dans le document.
virtual VisitBuildingBlockEnd(BuildingBlock)Appelé lorsque l’énumération d’un bloc de construction est terminée.
virtual VisitBuildingBlockStart(BuildingBlock)Appelé lorsque l’énumération d’un bloc de construction a commencé.
virtual VisitCellEnd(Cell)Appelé lorsque l’énumération d’une cellule de tableau est terminée.
virtual VisitCellStart(Cell)Appelé lorsque l’énumération d’une cellule de tableau a commencé.
virtual VisitCommentEnd(Comment)Appelé lorsque l’énumération d’un texte de commentaire est terminée.
virtual VisitCommentRangeEnd(CommentRangeEnd)Appelé lorsque la fin d’une plage de texte commentée est rencontrée.
virtual VisitCommentRangeStart(CommentRangeStart)Appelé lorsque le début d’une plage de texte commentée est rencontré.
virtual VisitCommentStart(Comment)Appelé lorsque l’énumération d’un texte de commentaire a commencé.
virtual VisitDocumentEnd(Document)Appelé lorsque l’énumération du document est terminée.
virtual VisitDocumentStart(Document)Appelé lorsque l’énumération du document a commencé.
virtual VisitEditableRangeEnd(EditableRangeEnd)Appelé lorsqu’une fin d’une plage modifiable est rencontrée dans le document.
virtual VisitEditableRangeStart(EditableRangeStart)Appelé lorsqu’un début de plage modifiable est rencontré dans le document.
virtual VisitFieldEnd(FieldEnd)Appelé lorsqu’un champ se termine dans le document.
virtual VisitFieldSeparator(FieldSeparator)Appelé lorsqu’un séparateur de champ est rencontré dans le document.
virtual VisitFieldStart(FieldStart)Appelé lorsqu’un champ commence dans le document.
virtual VisitFootnoteEnd(Footnote)Appelé lorsque l’énumération d’un texte de note de bas de page ou de fin est terminée.
virtual VisitFootnoteStart(Footnote)Appelé lorsque l’énumération d’un texte de note de bas de page ou de fin a commencé.
virtual VisitFormField(FormField)Appelé lorsqu’un champ de formulaire est rencontré dans le document.
virtual VisitGlossaryDocumentEnd(GlossaryDocument)Appelé lorsque l’énumération d’un document de glossaire est terminée.
virtual VisitGlossaryDocumentStart(GlossaryDocument)Appelé lorsque l’énumération d’un document de glossaire a commencé.
virtual VisitGroupShapeEnd(GroupShape)Appelé lorsque l’énumération d’une forme de groupe est terminée.
virtual VisitGroupShapeStart(GroupShape)Appelé lorsque l’énumération d’une forme de groupe a commencé.
virtual VisitHeaderFooterEnd(HeaderFooter)Appelé lorsque l’énumération d’un en-tête ou d’un pied de page dans une section est terminée.
virtual VisitHeaderFooterStart(HeaderFooter)Appelé lorsque l’énumération d’un en-tête ou d’un pied de page dans une section a commencé.
virtual VisitOfficeMathEnd(OfficeMath)Appelé lorsque l’énumération d’un objet Office Math est terminée.
virtual VisitOfficeMathStart(OfficeMath)Appelé lorsque l’énumération d’un objet Office Math a commencé.
virtual VisitParagraphEnd(Paragraph)Appelé lorsque l’énumération d’un paragraphe est terminée.
virtual VisitParagraphStart(Paragraph)Appelé lorsque l’énumération d’un paragraphe a commencé.
virtual VisitRowEnd(Row)Appelé lorsque l’énumération d’une ligne de table est terminée.
virtual VisitRowStart(Row)Appelé lorsque l’énumération d’une ligne de table a commencé.
virtual VisitRun(Run)Appelé lorsqu’une séquence de texte est rencontrée.
virtual VisitSectionEnd(Section)Appelé lorsque l’énumération d’une section est terminée.
virtual VisitSectionStart(Section)Appelé lorsque l’énumération d’une section a commencé.
virtual VisitShapeEnd(Shape)Appelé lorsque l’énumération d’une forme est terminée.
virtual VisitShapeStart(Shape)Appelé lorsque l’énumération d’une forme a commencé.
virtual VisitSmartTagEnd(SmartTag)Appelé lorsque l’énumération d’une balise intelligente est terminée.
virtual VisitSmartTagStart(SmartTag)Appelé lorsque l’énumération d’une balise intelligente a commencé.
virtual VisitSpecialChar(SpecialChar)Appelé lorsqu’unSpecialChar le nœud est rencontré dans le document.
virtual VisitStructuredDocumentTagEnd(StructuredDocumentTag)Appelé lorsque l’énumération d’une balise de document structuré est terminée.
virtual VisitStructuredDocumentTagRangeEnd(StructuredDocumentTagRangeEnd)Appelé lorsqu’un StructuredDocumentTagRangeEnd est rencontré.
virtual VisitStructuredDocumentTagRangeStart(StructuredDocumentTagRangeStart)Appelé lorsqu’un StructuredDocumentTagRangeStart est rencontré.
virtual VisitStructuredDocumentTagStart(StructuredDocumentTag)Appelé lorsque l’énumération d’une balise de document structuré a commencé.
virtual VisitSubDocument(SubDocument)Appelé lorsqu’un sous-document est rencontré.
virtual VisitTableEnd(Table)Appelé lorsque l’énumération d’une table est terminée.
virtual VisitTableStart(Table)Appelé lorsque l’énumération d’une table a commencé.

Remarques

AvecDocumentVisitor vous pouvez définir et exécuter des opérations personnalisées qui nécessitent une énumération sur l’arborescence du document.

Par exemple, Aspose.Words utiliseDocumentVisitor en interne pour économiserDocument dans divers formats et pour d’autres opérations comme la recherche de champs ou de signets sur un fragment d’un document.

À utiliserDocumentVisitor:

  1. Créer une classe dérivée deDocumentVisitor.
  2. Remplacez et fournissez des implémentations pour certaines ou toutes les méthodes VisitXXX pour effectuer certaines opérations personnalisées.
  3. AppelNode.Accept sur leNode that à partir duquel vous souhaitez démarrer l’énumération.

DocumentVisitor Fournit des implémentations par défaut pour toutes les méthodes VisitXXX afin de faciliter la création de nouveaux visiteurs de document, car seules les méthodes requises pour le visiteur particulier doivent être surchargées. Il n’est pas nécessaire de surcharger toutes les méthodes des visiteurs.

Pour plus d’informations, consultez le modèle de conception Visiteur.

Exemples

Montre comment utiliser un visiteur de document pour imprimer la structure des nœuds d’un document.

public void DocStructureToText()
{
    Document doc = new Document(MyDir + "DocumentVisitor-compatible features.docx");
    DocStructurePrinter visitor = new DocStructurePrinter();

    // Lorsque nous obtenons un nœud composite pour accepter un visiteur de document, le visiteur visite le nœud acceptant,
    // et parcourt ensuite tous les enfants du nœud de manière approfondie.
    // Le visiteur peut lire et modifier chaque nœud visité.
    doc.Accept(visitor);

    Console.WriteLine(visitor.GetText());
}

/// <summary>
/// Parcourt l'arbre des nœuds enfants d'un nœud.
/// Crée une carte de cet arbre sous la forme d'une chaîne.
/// </summary>
public class DocStructurePrinter : DocumentVisitor
{
    public DocStructurePrinter()
    {
        mAcceptingNodeChildTree = new StringBuilder();
    }

    public string GetText()
    {
        return mAcceptingNodeChildTree.ToString();
    }

    /// <summary>
    /// Appelé lorsqu'un nœud Document est rencontré.
    /// </summary>
    public override VisitorAction VisitDocumentStart(Document doc)
    {
        int childNodeCount = doc.GetChildNodes(NodeType.Any, true).Count;

        IndentAndAppendLine("[Document start] Child nodes: " + childNodeCount);
        mDocTraversalDepth++;

        // Autoriser le visiteur à continuer à visiter d'autres nœuds.
        return VisitorAction.Continue;
    }

    /// <summary>
    /// Appelé après que tous les nœuds enfants d'un nœud Document ont été visités.
    /// </summary>
    public override VisitorAction VisitDocumentEnd(Document doc)
    {
        mDocTraversalDepth--;
        IndentAndAppendLine("[Document end]");

        return VisitorAction.Continue;
    }

    /// <summary>
    /// Appelé lorsqu'un nœud Section est rencontré dans le document.
    /// </summary>
    public override VisitorAction VisitSectionStart(Section section)
    {
        // Obtenir l'index de notre section dans le 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>
    /// Appelé après que tous les nœuds enfants d'un nœud Section ont été visités.
    /// </summary>
    public override VisitorAction VisitSectionEnd(Section section)
    {
        mDocTraversalDepth--;
        IndentAndAppendLine("[Section end]");

        return VisitorAction.Continue;
    }

    /// <summary>
    /// Appelé lorsqu'un nœud Body est rencontré dans le document.
    /// </summary>
    public override VisitorAction VisitBodyStart(Body body)
    {
        int paragraphCount = body.Paragraphs.Count;
        IndentAndAppendLine("[Body start] Paragraphs: " + paragraphCount);
        mDocTraversalDepth++;

        return VisitorAction.Continue;
    }

    /// <summary>
    /// Appelé après que tous les nœuds enfants d'un nœud Body ont été visités.
    /// </summary>
    public override VisitorAction VisitBodyEnd(Body body)
    {
        mDocTraversalDepth--;
        IndentAndAppendLine("[Body end]");

        return VisitorAction.Continue;
    }

    /// <summary>
    /// Appelé lorsqu'un nœud Paragraphe est rencontré dans le document.
    /// </summary>
    public override VisitorAction VisitParagraphStart(Paragraph paragraph)
    {
        IndentAndAppendLine("[Paragraph start]");
        mDocTraversalDepth++;

        return VisitorAction.Continue;
    }

    /// <summary>
    /// Appelé après que tous les nœuds enfants d'un nœud Paragraphe ont été visités.
    /// </summary>
    public override VisitorAction VisitParagraphEnd(Paragraph paragraph)
    {
        mDocTraversalDepth--;
        IndentAndAppendLine("[Paragraph end]");

        return VisitorAction.Continue;
    }

    /// <summary>
    /// Appelé lorsqu'un nœud Run est rencontré dans le document.
    /// </summary>
    public override VisitorAction VisitRun(Run run)
    {
        IndentAndAppendLine("[Run] \"" + run.GetText() + "\"");

        return VisitorAction.Continue;
    }

    /// <summary>
    /// Appelé lorsqu'un nœud de sous-document est rencontré dans le document.
    /// </summary>
    public override VisitorAction VisitSubDocument(SubDocument subDocument)
    {
        IndentAndAppendLine("[SubDocument]");

        return VisitorAction.Continue;
    }

    /// <summary>
    /// Appelé lorsqu'un nœud de sous-document est rencontré dans le document.
    /// </summary>
    public override VisitorAction VisitStructuredDocumentTagRangeStart(StructuredDocumentTagRangeStart sdtRangeStart)
    {
        IndentAndAppendLine("[SdtRangeStart]");

        return VisitorAction.Continue;
    }

    /// <summary>
    /// Appelé lorsqu'un nœud de sous-document est rencontré dans le document.
    /// </summary>
    public override VisitorAction VisitStructuredDocumentTagRangeEnd(StructuredDocumentTagRangeEnd sdtRangeEnd)
    {
        IndentAndAppendLine("[SdtRangeEnd]");

        return VisitorAction.Continue;
    }

    /// <summary>
    /// Ajoutez une ligne au StringBuilder et indentez-la en fonction de la profondeur à laquelle se trouve le visiteur dans l'arborescence du document.
    /// </summary>
    /// <param name="texte"></param>
    private void IndentAndAppendLine(string text)
    {
        for (int i = 0; i < mDocTraversalDepth; i++) mAcceptingNodeChildTree.Append("|  ");

        mAcceptingNodeChildTree.AppendLine(text);
    }

    private int mDocTraversalDepth;
    private readonly StringBuilder mAcceptingNodeChildTree;
}

Voir également