DocumentVisitor — Aspose.Note FOSS for Python API Reference

Klasse: DocumentVisitor

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

DocumentVisitor er den abstrakte grundklasse for besøgs‑mønster traversal af et OneNote-dokumenttræ. Subklassificer den og tilsidesæt kun de besøgsmetoder, du har brug for. Kald node.Accept(visitor) for at starte traversal fra en vilkårlig node; kald doc.Accept(visitor) for at traversere hele dokumentet.

Alle metoder i grundklassen er ingen operationer (returnerer None). Tilsidesæt kun de, der er relevante for din brugssag.


Besøgsmetoder

MethodKaldt nårParametertype
VisitDocumentStart(document)Går ind i en Document nodeDocument
VisitDocumentEnd(document)Forlader en Document nodeDocument
VisitPageStart(page)Går ind i en Page nodePage
VisitPageEnd(page)Forlader en Page nodePage
VisitTitleStart(title)Går ind i en Title nodeTitle
VisitTitleEnd(title)Forlader en Title nodeTitle
VisitOutlineStart(outline)Indtaster en Outline nodeOutline
VisitOutlineEnd(outline)Forlader en Outline nodeOutline
VisitOutlineElementStart(outline_element)Går ind i en OutlineElement nodeOutlineElement
VisitOutlineElementEnd(outline_element)Forlader en OutlineElement nodeOutlineElement
VisitRichTextStart(rich_text)Indtastning af en RichText nodeRichText
VisitRichTextEnd(rich_text)Forlader en RichText nodeRichText
VisitImageStart(image)Indtaster en Image nodeImage
VisitImageEnd(image)Forlader en Image nodeImage

Alle metoder har signaturen:

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

Traverseringsorden

Accept udfører i en dybde-først, præ-ordens traversal:

  1. VisitDocumentStart kaldes ved indtræden i dokumentet.
  2. Hvert barn Page besøges rekursivt (PageStart → children → PageEnd).
  3. Inden for en Page: TitleStart/End, derefter hver Outline (OutlineStart → OutlineElements → OutlineEnd).
  4. Inden for en OutlineElement: OutlineElementStart, derefter børn (RichText, Image, indlejrede elementer), derefter OutlineElementEnd.
  5. VisitDocumentEnd kaldes efter at alle sider er blevet besøgt.

Brugseksempler

Indsaml alle sidetitler

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)

Tæl noder efter 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}")

Udtræk alle billeder via besøgeren

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)")

Byg en dokumentoversigtsrapport

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))

Besøg fra en undernode

Accept kan kaldes på enhver node, ikke kun roddokumentet:

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())

Understøttede nodetyper

Besøgeren håndterer i øjeblikket disse nodetyper: Document, Page, Title, Outline, OutlineElement, RichText, Image. Der findes ingen besøgsmetoder for Table, TableRow, TableCell, AttachedFile, eller NumberList — disse noder nås via GetChildNodes traversal i stedet.


Se også

  • Dokument: rotnode; kald doc.Accept(visitor) for at starte fuld traversal
  • Side: VisitPageStart / VisitPageEnd
  • Disposition: VisitOutlineStart / VisitOutlineEnd
  • RichText: VisitRichTextStart / VisitRichTextEnd
  • Billede: VisitImageStart / VisitImageEnd
 Dansk