DocumentVisitor

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 OneNote dokumenta pomoću posetilačkog obrasca. Nasledite je i prepišite samo metode posete koje su vam potrebne. Pozovite node.Accept(visitor) da započnete obilazak sa bilo kog čvora; pozovite doc.Accept(visitor) da pređete ceo dokument.

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


Metode posete

MethodPozvano kadaTip parametra
VisitDocumentStart(document)Ulazak u Document čvorDocument
VisitDocumentEnd(document)Izlazak iz Document čvorDocument
VisitPageStart(page)Ulazak u Page čvorPage
VisitPageEnd(page)Napustajući Page čvorPage
VisitTitleStart(title)Ulazeći u Title čvorTitle
VisitTitleEnd(title)Napustiti Title čvorTitle
VisitOutlineStart(outline)Ulazak u Outline čvorOutline
VisitOutlineEnd(outline)Napustiti Outline čvorOutline
VisitOutlineElementStart(outline_element)Ulazak u OutlineElement čvorOutlineElement
VisitOutlineElementEnd(outline_element)Napustiti OutlineElement čvorOutlineElement
VisitRichTextStart(rich_text)Ulazak u RichText čvorRichText
VisitRichTextEnd(rich_text)Napustiti RichText čvorRichText
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: ...

Redosled obilaska

Accept dispečira u dubinskom, pre‑order pretraživanju:

  1. VisitDocumentStart se poziva prilikom ulaska u dokument.
  2. Svako dete Page se rekurzivno posećuje (PageStart → children → PageEnd).
  3. U okviru Page: TitleStart/End, zatim svako Outline (OutlineStart → OutlineElements → OutlineEnd).
  4. Unutar jednog OutlineElement: OutlineElementStart, zatim deca (RichText, Image, ugneždeni elementi), zatim OutlineElementEnd.
  5. VisitDocumentEnd se poziva nakon što su sve stranice posjećene.

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

Prebroj č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 posetioca

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

Poseti iz podčvora

Accept može se pozvati na bilo kojem čvoru, ne samo na korenskom 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žani tipovi čvorova

Posetilac trenutno raspoređuje za ove tipove čvorova: Document, Page, Title, Outline, OutlineElement, RichText, Image. Ne postoje metode posete za Table, TableRow, TableCell, AttachedFile, ili NumberList — ti čvorovi se dostižu putem GetChildNodes traversala umesto.


Vidi i

  • Dokument: korenski čvor; poziv doc.Accept(visitor) za pokretanje potpunog pretraživanja
  • Stranica: VisitPageStart / VisitPageEnd
  • Kontura: VisitOutlineStart / VisitOutlineEnd
  • RichText: VisitRichTextStart / VisitRichTextEnd
  • Slika: VisitImageStart / VisitImageEnd
 Српски