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
| Method | Appelé lorsque | Type de paramètre |
|---|---|---|
VisitDocumentStart(document) | Entrée dans un Document node | Document |
VisitDocumentEnd(document) | Quitter un Document node | Document |
VisitPageStart(page) | Entrer dans un Page node | Page |
VisitPageEnd(page) | Quitter un Page node | Page |
VisitTitleStart(title) | Entrer dans un Title node | Title |
VisitTitleEnd(title) | Quitter un Title node | Title |
VisitOutlineStart(outline) | Entrée d’un Outline nœud | Outline |
VisitOutlineEnd(outline) | Sortie d’un Outline nœud | Outline |
VisitOutlineElementStart(outline_element) | Entrée d’un OutlineElement node | OutlineElement |
VisitOutlineElementEnd(outline_element) | Quitter un OutlineElement node | OutlineElement |
VisitRichTextStart(rich_text) | Entrée dans un RichText nœud | RichText |
VisitRichTextEnd(rich_text) | Sortie d’un RichText nœud | RichText |
VisitImageStart(image) | Entrée d’un Image nœud | Image |
VisitImageEnd(image) | Sortie d’un Image nœud | Image |
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 :
VisitDocumentStartest appelé lors de l’entrée dans le document.- Chaque enfant
Pageest visité récursivement (PageStart → children → PageEnd). - À l’intérieur d’un
Page:TitleStart/End, puis chaqueOutline(OutlineStart → OutlineElements → OutlineEnd). - Dans un
OutlineElement:OutlineElementStart, puis les enfants (RichText,Image, éléments imbriqués), puisOutlineElementEnd. VisitDocumentEndest 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.