DocumentVisitor — Aspose.Note FOSS for Python API Reference

Třída: DocumentVisitor

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

DocumentVisitor je abstraktní základní třída pro procházení stromu dokumentu OneNote pomocí vzoru návštěvníka. Dědí ji a přepište pouze metody návštěvy, které potřebujete. Zavolejte node.Accept(visitor) pro zahájení procházení z libovolného uzlu; zavolejte doc.Accept(visitor) pro procházení celého dokumentu.

Všechny metody v základní třídě jsou nečinné (vrací None). Přepište pouze ty, které jsou relevantní pro váš případ použití.


Metody návštěvy

MethodVoláno, kdyžTyp parametru
VisitDocumentStart(document)Vstup do Document uzluDocument
VisitDocumentEnd(document)Opouštění Document uzluDocument
VisitPageStart(page)Vstup do Page uzluPage
VisitPageEnd(page)Opouštění Page uzelPage
VisitTitleStart(title)Vstupování do Title uzelTitle
VisitTitleEnd(title)Zanechání Title nodeTitle
VisitOutlineStart(outline)Vstupování do Outline nodeOutline
VisitOutlineEnd(outline)Opouštění Outline uzelOutline
VisitOutlineElementStart(outline_element)Vstupování do OutlineElement uzelOutlineElement
VisitOutlineElementEnd(outline_element)Opouštění OutlineElement uzelOutlineElement
VisitRichTextStart(rich_text)Vstupování do a RichText nodeRichText
VisitRichTextEnd(rich_text)Opouštění RichText nodeRichText
VisitImageStart(image)Vstupování do Image uzelImage
VisitImageEnd(image)Opouštění Image uzelImage

Všechny metody mají signaturu:

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

Pořadí procházení

Accept rozesílá v hloubkovém, preorderovém průchodu:

  1. VisitDocumentStart je voláno při vstupu do dokumentu.
  2. Každé dítě Page je navštěvováno rekurzivně (PageStart → children → PageEnd).
  3. V rámci Page: TitleStart/End, pak každé Outline (OutlineStart → OutlineElements → OutlineEnd).
  4. V rámci OutlineElement: OutlineElementStart, pak děti (RichText, Image, vnořené prvky), pak OutlineElementEnd.
  5. VisitDocumentEnd je voláno po navštívení všech stránek.

Příklady použití

Shromáždit všechny názvy stránek

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čítat uzly podle 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}")

Extrahovat všechny obrázky pomocí návštěvní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)")

Vytvořit zprávu o osnově 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ívit z poduzlu

Accept může být voláno na libovolném uzlu, nejen na kořenovém 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())

Podporované typy uzlů

Návštěvník v současnosti rozesílá pro tyto typy uzlů: Document, Page, Title, Outline, OutlineElement, RichText, Image. Neexistují žádné metody visit pro Table, TableRow, TableCell, AttachedFile, nebo NumberList — tyto uzly jsou dosaženy pomocí GetChildNodes průchodem místo toho.


Viz také

  • Dokument: kořenový uzel; zavolejte doc.Accept(visitor) pro zahájení úplného průchodu
  • Stránka: VisitPageStart / VisitPageEnd
  • Osnova: VisitOutlineStart / VisitOutlineEnd
  • RichText: VisitRichTextStart / VisitRichTextEnd
  • Obrázek: VisitImageStart / VisitImageEnd
 Čeština