DocumentVisitor — Aspose.Note FOSS for Python API Reference

Klasa: DocumentVisitor

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

DocumentVisitor je apstraktna osnovna klasa za obilazak stabla dokumenta OneNote pomoću obrasca posjetitelja. Naslijedite je i prepišite samo metode posjete koje su vam potrebne. Pozovite node.Accept(visitor) za pokretanje obilaska s bilo kojeg čvora; pozovite doc.Accept(visitor) za obilazak cijelog dokumenta.

Sve metode u osnovnoj klasi su bez učinka (vraćaju None). Prepišite samo one koje su relevantne za vaš slučaj upotrebe.


Metode posjete

MethodPozvano kadaTip parametra
VisitDocumentStart(document)Ulazak u Document čvorDocument
VisitDocumentEnd(document)Napustanje Document čvoraDocument
VisitPageStart(page)Ulazak u Page čvorPage
VisitPageEnd(page)Napustiti Page čvorPage
VisitTitleStart(title)Ulazak u Title čvorTitle
VisitTitleEnd(title)Ostavljajući Title nodeTitle
VisitOutlineStart(outline)Ulazak u Outline nodeOutline
VisitOutlineEnd(outline)Napustiti Outline čvorOutline
VisitOutlineElementStart(outline_element)Ulazak u OutlineElement čvorOutlineElement
VisitOutlineElementEnd(outline_element)Napustanje OutlineElement čvorOutlineElement
VisitRichTextStart(rich_text)Ulazak u RichText nodeRichText
VisitRichTextEnd(rich_text)Odlazak RichText nodeRichText
VisitImageStart(image)Ulazak u Image čvorImage
VisitImageEnd(image)Napustiti Image čvorImage

Sve metode imaju potpis:

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

Redoslijed traversiranja

Accept raspoređuje u dubinskom, pre-order pretraživanju:

  1. VisitDocumentStart se poziva pri ulasku u dokument.
  2. Svako dijete Page se posjećuje rekurzivno (PageStart → children → PageEnd).
  3. Unutar Page: TitleStart/End, zatim svako Outline (OutlineStart → OutlineElements → OutlineEnd).
  4. Unutar jednog OutlineElement: OutlineElementStart, zatim djeca (RichText, Image, ugniježđeni elementi), zatim OutlineElementEnd.
  5. VisitDocumentEnd se poziva nakon što su sve stranice posjećene.

Primjeri upotrebe

Prikupi sve naslove stranica

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)

Izbroj čvorove po tipu

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

Izvuci sve slike putem posjetitelja

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

Izradi izvještaj o strukturi dokumenta

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

Posjeti iz podčvora

Accept se može pozvati na bilo kojem čvoru, ne samo na korijenskom dokumentu:

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

Podržane vrste čvorova

Posjetitelj trenutno obrađuje ove vrste čvorova: Document, Page, Title, Outline, OutlineElement, RichText, Image. Ne postoje metode posjete za Table, TableRow, TableCell, AttachedFile, ili NumberList — ti čvorovi se dosežu putem GetChildNodes traversala umjesto.


Vidi također

  • Dokument: korijenski čvor; pozovite doc.Accept(visitor) za pokretanje potpunog traversala
  • Stranica: VisitPageStart / VisitPageEnd
  • Kontura: VisitOutlineStart / VisitOutlineEnd
  • RichText: VisitRichTextStart / VisitRichTextEnd
  • Slika: VisitImageStart / VisitImageEnd
 Hrvatski