DocumentVisitor

DocumentVisitor — Aspose.Note FOSS for Python API Reference

Klass: DocumentVisitor

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

DocumentVisitor är den abstrakta basklassen för besökarmönstertraversering av ett OneNote-dokumentträd. Skapa en subklass av den och åsidosätt endast de besöksmetoder du behöver. Anropa node.Accept(visitor) för att starta traversering från vilken nod som helst; anropa doc.Accept(visitor) för att traversera hela dokumentet.

Alla metoder i basklassen är inga operationer (returnerar None). Åsidosätt endast de som är relevanta för ditt användningsfall.


Besöksmetoder

MethodKallas närParametertyp
VisitDocumentStart(document)Går in i en Document nodDocument
VisitDocumentEnd(document)Lämnar en Document nodDocument
VisitPageStart(page)Går in i en Page nodPage
VisitPageEnd(page)Lämnar en Page nodPage
VisitTitleStart(title)Går in i en Title nodTitle
VisitTitleEnd(title)Lämnar en Title nodeTitle
VisitOutlineStart(outline)Går in i en Outline nodeOutline
VisitOutlineEnd(outline)Lämnande en Outline nodeOutline
VisitOutlineElementStart(outline_element)Går in i en OutlineElement nodeOutlineElement
VisitOutlineElementEnd(outline_element)Lämnar en OutlineElement nodeOutlineElement
VisitRichTextStart(rich_text)Går in i en RichText nodeRichText
VisitRichTextEnd(rich_text)Lämnar en RichText nodeRichText
VisitImageStart(image)Ange en Image nodImage
VisitImageEnd(image)Lämnar en Image nodImage

Alla metoder har signaturen:

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

Traverseringsordning

Accept utför utskick i en djupförst, förordningsföljd traversering:

  1. VisitDocumentStart kallas när dokumentet öppnas.
  2. Varje barn Page besöks rekursivt (PageStart → children → PageEnd).
  3. Inom en Page: TitleStart/End, sedan varje Outline (OutlineStart → OutlineElements → OutlineEnd).
  4. Inom en OutlineElement: OutlineElementStart, sedan barn (RichText, Image, nästlade element), sedan OutlineElementEnd.
  5. VisitDocumentEnd anropas efter att alla sidor har besökts.

Användningsexempel

Samla alla sidtitlar

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)

Räkna noder efter typ

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

Extrahera alla bilder via besökare

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 dokumentöversiktsrapport

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 från en undernod

Accept kan anropas på vilken nod som helst, inte bara 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ödda nodtyper

Besökaren hanterar för närvarande dessa nodtyper: Document, Page, Title, Outline, OutlineElement, RichText, Image. Det finns inga besöksmetoder för Table, TableRow, TableCell, AttachedFile, eller NumberList — dessa noder nås via GetChildNodes traversering istället.


Se även

  • Dokument: rotnod; anropa doc.Accept(visitor) för att starta full traversering
  • Sida: VisitPageStart / VisitPageEnd
  • Översikt: VisitOutlineStart / VisitOutlineEnd
  • RichText: VisitRichTextStart / VisitRichTextEnd
  • Bild: VisitImageStart / VisitImageEnd
 Svenska