DocumentVisitor

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

MethodAangeroepen wanneerParametertype
VisitDocumentStart(document)Binnenkomen van een Document knoopDocument
VisitDocumentEnd(document)Verlaten van een Document knoopDocument
VisitPageStart(page)Binnenkomen van een Page knoopPage
VisitPageEnd(page)Verlaten van een Page nodePage
VisitTitleStart(title)Betreden van een Title nodeTitle
VisitTitleEnd(title)Een verlaten Title nodeTitle
VisitOutlineStart(outline)Een invoeren Outline nodeOutline
VisitOutlineEnd(outline)Een verlatend Outline nodeOutline
VisitOutlineElementStart(outline_element)Betreden van een OutlineElement nodeOutlineElement
VisitOutlineElementEnd(outline_element)Verlaten van een OutlineElement nodeOutlineElement
VisitRichTextStart(rich_text)Een invoeren RichText nodeRichText
VisitRichTextEnd(rich_text)Een achterlaten RichText nodeRichText
VisitImageStart(image)Invoeren van een Image nodeImage
VisitImageEnd(image)Een achterlatende Image nodeImage

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:

  1. VisitDocumentStart wordt aangeroepen bij het betreden van het document.
  2. Elk kind Page wordt recursief bezocht (PageStart → children → PageEnd).
  3. Binnen een Page: TitleStart/End, dan elk Outline (OutlineStart → OutlineElements → OutlineEnd).
  4. Binnen een OutlineElement: OutlineElementStart, dan kinderen (RichText, Image, geneste elementen), dan OutlineElementEnd.
  5. VisitDocumentEnd wordt 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
 Nederlands