DocumentVisitor — Aspose.Note FOSS for Python API Reference
Klasse: DocumentVisitor
Package: aspose.note Import: from aspose.note import DocumentVisitor
DocumentVisitor is de abstracte basisklasse voor visitor‑pattern traversie van een OneNote‑documentboom. Subclass het en overschrijf alleen de visit‑methoden die je nodig hebt. Roep node.Accept(visitor) om de traversie te starten vanaf een willekeurige knoop; roep doc.Accept(visitor) om het volledige document te traverseren.
Alle methoden in de basisklasse doen niets (return None). Overschrijf alleen de methoden die relevant zijn voor jouw gebruikssituatie.
Visit‑methoden
| Method | Aangeroepen wanneer | Parametertype |
|---|---|---|
VisitDocumentStart(document) | Binnenkomen van een Document knoop | Document |
VisitDocumentEnd(document) | Verlaten van een Document knoop | Document |
VisitPageStart(page) | Binnenkomen van een Page knoop | Page |
VisitPageEnd(page) | Verlaten van een Page node | Page |
VisitTitleStart(title) | Betreden van een Title node | Title |
VisitTitleEnd(title) | Een verlaten Title node | Title |
VisitOutlineStart(outline) | Een invoeren Outline node | Outline |
VisitOutlineEnd(outline) | Een verlatend Outline node | Outline |
VisitOutlineElementStart(outline_element) | Betreden van een OutlineElement node | OutlineElement |
VisitOutlineElementEnd(outline_element) | Verlaten van een OutlineElement node | OutlineElement |
VisitRichTextStart(rich_text) | Een invoeren RichText node | RichText |
VisitRichTextEnd(rich_text) | Een achterlaten RichText node | RichText |
VisitImageStart(image) | Invoeren van een Image node | Image |
VisitImageEnd(image) | Een achterlatende Image node | Image |
Alle methoden hebben de handtekening:
def VisitXxxStart(self, node: NodeType) -> None: ...
def VisitXxxEnd(self, node: NodeType) -> None: ...Traversievolgorde
Accept verstuurt in een diepte-eerst, pre-order traversie:
VisitDocumentStartwordt aangeroepen bij het betreden van het document.- Elk kind
Pagewordt recursief bezocht (PageStart → children → PageEnd). - Binnen een
Page:TitleStart/End, dan elkOutline(OutlineStart → OutlineElements → OutlineEnd). - Binnen een
OutlineElement:OutlineElementStart, dan kinderen (RichText,Image, geneste elementen), danOutlineElementEnd. VisitDocumentEndwordt aangeroepen nadat alle pagina’s zijn bezocht.
Voorbeelden van gebruik
Verzamel alle paginatitels
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)Tel knooppunten per 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}")Extraheer alle afbeeldingen via visitor
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)")Maak een documentoverzichtsrapport
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))Bezoek vanaf een subknooppunt
Accept kan worden aangeroepen op elk knooppunt, niet alleen op het rootdocument:
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())Ondersteunde knooppunttypes
De visitor dispatcht momenteel voor deze knooptypen: Document, Page, Title, Outline, OutlineElement, RichText, Image. Er zijn geen visit-methoden voor Table, TableRow, TableCell, AttachedFile, of NumberList — die knopen worden bereikt via GetChildNodes traversie in plaats daarvan.
Zie ook
- Document: wortelknoop; roep
doc.Accept(visitor)om volledige traversie te starten - Page:
VisitPageStart/VisitPageEnd - Outline:
VisitOutlineStart/VisitOutlineEnd - RichText:
VisitRichTextStart/VisitRichTextEnd - Afbeelding:
VisitImageStart/VisitImageEnd