DocumentVisitor

DocumentVisitor — Aspose.Note FOSS for Python API Reference

Klasė: DocumentVisitor

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

DocumentVisitor yra abstrakti bazinė klasė, skirta visitor‑pattern OneNote dokumento medžio perėjimui. Sukurkite iš jos išvestinę klasę ir perrašykite tik reikiamus visit metodus. Iškvieskite node.Accept(visitor) pradėti perėjimą nuo bet kurio mazgo; iškvieskite doc.Accept(visitor) peržvelgti visą dokumentą.

Visų bazinės klasės metodų nėra (grąžina None). Perrašykite tik tuos, kurie yra svarbūs jūsų naudojimo atvejui.


Lankymo metodai

MethodIškviečiamas, kaiParametro tipas
VisitDocumentStart(document)Įeinama į Document mazgąDocument
VisitDocumentEnd(document)Išeinama iš Document mazgoDocument
VisitPageStart(page)Įeinama į Page mazgąPage
VisitPageEnd(page)Išeinama iš Page mazgoPage
VisitTitleStart(title)Įeinama į Title mazgąTitle
VisitTitleEnd(title)Palikdamas a Title nodeTitle
VisitOutlineStart(outline)Įeinant į Outline nodeOutline
VisitOutlineEnd(outline)Palikdamas Outline mazgasOutline
VisitOutlineElementStart(outline_element)Įeinant į OutlineElement mazgasOutlineElement
VisitOutlineElementEnd(outline_element)Paliekant OutlineElement mazgasOutlineElement
VisitRichTextStart(rich_text)Įvedama RichText nodeRichText
VisitRichTextEnd(rich_text)Palikdamas a RichText nodeRichText
VisitImageStart(image)Įeinant į Image mazgasImage
VisitImageEnd(image)Paliekant Image mazgasImage

Visų metodų parašas:

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

Perėjimo tvarka

Accept išsiunčia giliojo pirmumo, priešužsakymo (pre‑order) perėjimą:

  1. VisitDocumentStart kviečiamas įeinant į dokumentą.
  2. Kiekvienas vaikas Page yra lankomas rekursyviai (PageStart → children → PageEnd).
  3. Viduje Page: TitleStart/End, tada kiekvienas Outline (OutlineStart → OutlineElements → OutlineEnd).
  4. Per OutlineElement: OutlineElementStart, tada vaikai (RichText, Image, įdėtiniai elementai), tada OutlineElementEnd.
  5. VisitDocumentEnd yra iškviečiamas po to, kai visos puslapiai buvo aplankyti.

Naudojimo pavyzdžiai

Surinkti visus puslapių pavadinimus

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)

Skaičiuoti mazgus pagal tipą

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

Išgauti visas nuotraukas per lankytoją

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

Sukurti dokumento struktūros ataskaitą

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

Aplankyti iš submazgo

Accept gali būti iškviestas bet kuriame mazge, ne tik šakniniame dokumente:

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

Palaikomi mazgų tipai

Lankytojas šiuo metu paskirsto šiuos mazgo tipus: Document, Page, Title, Outline, OutlineElement, RichText, Image. Nėra lankymo metodų, skirtų Table, TableRow, TableCell, AttachedFile, arba NumberList — tie mazgai pasiekiami per GetChildNodes traversal vietoje.


Žr. taip pat

  • Dokumentas: šakninis mazgas; iškviesti doc.Accept(visitor) pradėti pilną perėjimą
  • Puslapis: VisitPageStart / VisitPageEnd
  • Struktūra: VisitOutlineStart / VisitOutlineEnd
  • RichText: VisitRichTextStart / VisitRichTextEnd
  • Vaizdas: VisitImageStart / VisitImageEnd
 Lietuvių