DocumentVisitor

DocumentVisitor — Aspose.Note FOSS for Python API Reference

Classe : DocumentVisitor

Package: aspose.note Import: from aspose.note import DocumentVisitor

DocumentVisitor est la classe de base abstraite pour le parcours en mode visiteur d’un arbre de documents OneNote. Sous-classez‑la et surchargez uniquement les méthodes de visite dont vous avez besoin. Appelez node.Accept(visitor) pour démarrer le parcours depuis n’importe quel nœud ; appelez doc.Accept(visitor) pour parcourir le document entier.

Toutes les méthodes de la classe de base sont des no‑ops (renvoient None). Surchargez uniquement celles qui sont pertinentes pour votre cas d’utilisation.


Méthodes de visite

MethodAppelé lorsqueType de paramètre
VisitDocumentStart(document)Entrée dans un Document nodeDocument
VisitDocumentEnd(document)Quitter un Document nodeDocument
VisitPageStart(page)Entrer dans un Page nodePage
VisitPageEnd(page)Quitter un Page nodePage
VisitTitleStart(title)Entrer dans un Title nodeTitle
VisitTitleEnd(title)Quitter un Title nodeTitle
VisitOutlineStart(outline)Entrée d’un Outline nœudOutline
VisitOutlineEnd(outline)Sortie d’un Outline nœudOutline
VisitOutlineElementStart(outline_element)Entrée d’un OutlineElement nodeOutlineElement
VisitOutlineElementEnd(outline_element)Quitter un OutlineElement nodeOutlineElement
VisitRichTextStart(rich_text)Entrée dans un RichText nœudRichText
VisitRichTextEnd(rich_text)Sortie d’un RichText nœudRichText
VisitImageStart(image)Entrée d’un Image nœudImage
VisitImageEnd(image)Sortie d’un Image nœudImage

Toutes les méthodes ont la signature :

def VisitXxxStart(self, node: NodeType) -> None: ...
def VisitXxxEnd(self, node: NodeType) -> None: ...

Ordre de parcours

Accept déclenchements dans un parcours en profondeur, pré-ordre :

  1. VisitDocumentStart est appelé lors de l’entrée dans le document.
  2. Chaque enfant Page est visité récursivement (PageStart → children → PageEnd).
  3. À l’intérieur d’un Page: TitleStart/End, puis chaque Outline (OutlineStart → OutlineElements → OutlineEnd).
  4. Dans un OutlineElement: OutlineElementStart, puis les enfants (RichText, Image, éléments imbriqués), puis OutlineElementEnd.
  5. VisitDocumentEnd est appelé après que toutes les pages ont été visitées.

Exemples d’utilisation

Collecter tous les titres de page

from aspose.note import Document, DocumentVisitor, Page, Title

class TitleCollector(DocumentVisitor):
    def __init__(self):
        self.titles = []

    def VisitTitleStart(self, title: Title) -> None:
        if title.TitleText:
            self.titles.append(title.TitleText.Text)

doc = Document("MyNotes.one")
visitor = TitleCollector()
doc.Accept(visitor)
print(visitor.titles)

Compter les nœuds par type

from aspose.note import Document, DocumentVisitor, Page, RichText, Image

class NodeCounter(DocumentVisitor):
    def __init__(self):
        self.pages = 0
        self.rich_texts = 0
        self.images = 0

    def VisitPageStart(self, page: Page) -> None:
        self.pages += 1

    def VisitRichTextStart(self, rich_text: RichText) -> None:
        self.rich_texts += 1

    def VisitImageStart(self, image: Image) -> None:
        self.images += 1

doc = Document("MyNotes.one")
counter = NodeCounter()
doc.Accept(counter)
print(f"Pages: {counter.pages}, RichText: {counter.rich_texts}, Images: {counter.images}")

Extraire toutes les images via le visiteur

from aspose.note import Document, DocumentVisitor, Image

class ImageExtractor(DocumentVisitor):
    def __init__(self):
        self.images = []

    def VisitImageStart(self, image: Image) -> None:
        if image.Bytes:
            self.images.append(image)

doc = Document("MyNotes.one")
extractor = ImageExtractor()
doc.Accept(extractor)

for i, img in enumerate(extractor.images):
    filename = img.FileName or f"image_{i}.bin"
    with open(filename, "wb") as f:
        f.write(img.Bytes)
    print(f"Saved: {filename} ({len(img.Bytes)} bytes)")

Construire un rapport de plan du document

from aspose.note import (
    Document, DocumentVisitor,
    Page, Outline, OutlineElement, RichText
)

class OutlineReporter(DocumentVisitor):
    def __init__(self):
        self._indent = 0
        self.lines = []

    def VisitPageStart(self, page: Page) -> None:
        title = page.Title.TitleText.Text if page.Title and page.Title.TitleText else "(untitled)"
        self.lines.append(f"PAGE: {title}")
        self._indent = 1

    def VisitOutlineElementStart(self, elem: OutlineElement) -> None:
        self._indent = 2 + elem.IndentLevel

    def VisitRichTextStart(self, rt: RichText) -> None:
        if rt.Text.strip():
            self.lines.append("  " * self._indent + rt.Text.strip())

doc = Document("MyNotes.one")
reporter = OutlineReporter()
doc.Accept(reporter)
print("\n".join(reporter.lines))

Visiter depuis un sous-nœud

Accept peut être appelé sur n’importe quel nœud, pas seulement le document racine :

from aspose.note import Document, Page, DocumentVisitor, RichText

class TextPrinter(DocumentVisitor):
    def VisitRichTextStart(self, rt: RichText) -> None:
        print(rt.Text)

doc = Document("MyNotes.one")
pages = doc.GetChildNodes(Page)
if pages:
    # Visit only the first page
    pages[0].Accept(TextPrinter())

Types de nœuds pris en charge

Le visiteur dispatch actuellement pour ces types de nœuds : Document, Page, Title, Outline, OutlineElement, RichText, Image. Il n’existe aucune méthode de visite pour Table, TableRow, TableCell, AttachedFile, ou NumberList — ces nœuds sont atteints via GetChildNodes traversée à la place.


Voir aussi

  • Document: nœud racine ; appel doc.Accept(visitor) pour démarrer le parcours complet
  • Page: VisitPageStart / VisitPageEnd
  • Plan: VisitOutlineStart / VisitOutlineEnd
  • RichText: VisitRichTextStart / VisitRichTextEnd
  • Image: VisitImageStart / VisitImageEnd
 Français