DocumentVisitor

DocumentVisitor — Aspose.Note FOSS for Python API Reference

Trieda: DocumentVisitor

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

DocumentVisitor je abstraktnou základnou triedou pre prechádzanie stromom dokumentu OneNote pomocou visitor vzoru. Dedičte ju a prepíšte iba tie visit metódy, ktoré potrebujete. Zavolajte node.Accept(visitor) na spustenie prechádzania z ľubovoľného uzla; zavolajte doc.Accept(visitor) na prechádzanie celého dokumentu.

Všetky metódy v základnej triede sú nečinné (vracajú None). Prepíšte iba tie, ktoré sú relevantné pre váš prípad použitia.


Metódy návštevy

MethodVolané, keďTyp parametra
VisitDocumentStart(document)Vstup do Document uzlaDocument
VisitDocumentEnd(document)Opúšťanie Document uzlaDocument
VisitPageStart(page)Vstup do Page uzlaPage
VisitPageEnd(page)Opúšťam Page uzolPage
VisitTitleStart(title)Vstupujem Title uzolTitle
VisitTitleEnd(title)Opúšťanie a Title nodeTitle
VisitOutlineStart(outline)Vstupovanie do Outline nodeOutline
VisitOutlineEnd(outline)Opúšťanie Outline uzolOutline
VisitOutlineElementStart(outline_element)Vstupovanie do OutlineElement uzolOutlineElement
VisitOutlineElementEnd(outline_element)Opúšťanie OutlineElement uzolOutlineElement
VisitRichTextStart(rich_text)Zadávanie RichText nodeRichText
VisitRichTextEnd(rich_text)Opúšťanie a RichText nodeRichText
VisitImageStart(image)Vstupovanie do Image uzolImage
VisitImageEnd(image)Opúšťanie Image uzolImage

Všetky metódy majú nasledujúci podpis:

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

Poradie prechádzania

Accept rozposiela v hĺbkovom, predobjednom prechode:

  1. VisitDocumentStart sa volá pri vstupe do dokumentu.
  2. Každé dieťa Page sa navštevuje rekurzívne (PageStart → children → PageEnd).
  3. V rámci Page: TitleStart/End, potom každé Outline (OutlineStart → OutlineElements → OutlineEnd).
  4. V rámci OutlineElement: OutlineElementStart, potom deti (RichText, Image, vnorené prvky), potom OutlineElementEnd.
  5. VisitDocumentEnd sa volá po tom, čo boli navštívené všetky stránky.

Príklady použitia

Zozbierajte všetky názvy stránok

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)

Počítaj uzly podľa typu

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

Extrahovať všetky obrázky pomocou návštevníka

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

Vytvoriť správu o osnovi dokumentu

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

Navštíviť z poduzla

Accept môže byť volané na akomkoľvek uzle, nielen na koreňovom 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())

Podporované typy uzlov

Návštevník momentálne rozosiela pre tieto typy uzlov: Document, Page, Title, Outline, OutlineElement, RichText, Image. Nie sú žiadne metódy visit pre Table, TableRow, TableCell, AttachedFile, alebo NumberList — tieto uzly sa dosahujú cez GetChildNodes prechádzanie namiesto toho.


Pozri tiež

  • Dokument: koreňový uzol; zavolať doc.Accept(visitor) na spustenie úplného prechádzania
  • Stránka: VisitPageStart / VisitPageEnd
  • Obrys: VisitOutlineStart / VisitOutlineEnd
  • RichText: VisitRichTextStart / VisitRichTextEnd
  • Obrázok: VisitImageStart / VisitImageEnd
 Slovenčina