DocumentVisitor

DocumentVisitor — Aspose.Note FOSS for Python API Reference

Klasse: DocumentVisitor

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

DocumentVisitor er den abstrakte basisklassen for besøksmønster‑gjennomgang av et OneNote‑dokumenttre. Subklassér den og overstyr kun de besøksmetodene du trenger. Kall node.Accept(visitor) for å starte gjennomgang fra en hvilken som helst node; kall doc.Accept(visitor) for å gå gjennom hele dokumentet.

Alle metoder i basisklassen er ingen‑operasjoner (returnerer None). Overstyr kun de som er relevante for ditt brukstilfelle.


Besøksmetoder

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

Alle metoder har signaturen:

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

Traverseringsrekkefølge

Accept distribuerer i en dybde-først, pre-order-traversering:

  1. VisitDocumentStart kalles når dokumentet åpnes.
  2. Hvert barn Page besøkes rekursivt (PageStart → children → PageEnd).
  3. Innenfor en Page: TitleStart/End, deretter hver Outline (OutlineStart → OutlineElements → OutlineEnd).
  4. Innenfor en OutlineElement: OutlineElementStart, deretter barn (RichText, Image, nestede elementer), deretter OutlineElementEnd.
  5. VisitDocumentEnd blir kalt etter at alle sider har blitt besøkt.

Brukseksempler

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

Tell noder etter 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}")

Ekstraher alle bilder 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)")

Bygg en dokumentoversiktsrapport

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øk fra en undernode

Accept kan kalles på hvilken som helst node, ikke bare rotdokumentet:

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

Støttede nodetyper

Besøkeren distribuerer for øyeblikket for disse nodetypene: Document, Page, Title, Outline, OutlineElement, RichText, Image. Det finnes ingen besøksmetoder for Table, TableRow, TableCell, AttachedFile, eller NumberList — disse nodene nås via GetChildNodes traversering i stedet.


Se også

  • Dokument: rotnode; kall doc.Accept(visitor) for å starte full traversering
  • Side: VisitPageStart / VisitPageEnd
  • Omriss: VisitOutlineStart / VisitOutlineEnd
  • RichText: VisitRichTextStart / VisitRichTextEnd
  • Bilde: VisitImageStart / VisitImageEnd
 Norsk