DocumentVisitor

DocumentVisitor — Aspose.Note FOSS for Python API Reference

Klasa: DocumentVisitor

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

DocumentVisitor jest abstrakcyjną klasą bazową dla przeglądania drzewa dokumentu OneNote przy użyciu wzorca odwiedzającego. Utwórz podklasę i nadpisz tylko potrzebne metody visit. Wywołaj node.Accept(visitor) aby rozpocząć przeglądanie od dowolnego węzła; wywołaj doc.Accept(visitor) aby przeglądać cały dokument.

Wszystkie metody w klasie bazowej są operacjami bez efektu (zwracają None). Nadpisz tylko te, które są istotne dla twojego przypadku użycia.


Metody odwiedzające

MethodWywoływane, gdyTyp parametru
VisitDocumentStart(document)Wchodząc w Document nodeDocument
VisitDocumentEnd(document)Opuszczając Document nodeDocument
VisitPageStart(page)Wchodząc Page nodePage
VisitPageEnd(page)Opuszczając Page nodePage
VisitTitleStart(title)Wchodząc Title nodeTitle
VisitTitleEnd(title)Opuszczając Title nodeTitle
VisitOutlineStart(outline)Wchodząc w Outline węzełOutline
VisitOutlineEnd(outline)Opuszczając Outline węzełOutline
VisitOutlineElementStart(outline_element)Wchodząc w OutlineElement węzełOutlineElement
VisitOutlineElementEnd(outline_element)Opuszczając OutlineElement węzełOutlineElement
VisitRichTextStart(rich_text)Wchodząc w RichText węzełRichText
VisitRichTextEnd(rich_text)Wychodząc z RichText węzełRichText
VisitImageStart(image)Wchodząc w Image węzełImage
VisitImageEnd(image)Opuszczając Image węzełImage

Wszystkie metody mają sygnaturę:

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

Kolejność traversalu

Accept wywołania w przeszukiwaniu wgłąb, w kolejności pre-order:

  1. VisitDocumentStart jest wywoływane przy wchodzeniu do dokumentu.
  2. Każdy element potomny Page jest odwiedzany rekurencyjnie (PageStart → children → PageEnd).
  3. Wewnątrz Page: TitleStart/End, a następnie każdy Outline (OutlineStart → OutlineElements → OutlineEnd).
  4. W OutlineElement: OutlineElementStart, następnie dzieci (RichText, Image, zagnieżdżone elementy), następnie OutlineElementEnd.
  5. VisitDocumentEnd jest wywoływana po odwiedzeniu wszystkich stron.

Przykłady użycia

Zbierz wszystkie tytuły stron

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)

Policz węzły według 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}")

Wyodrębnij wszystkie obrazy przy użyciu visitor

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

Zbuduj raport z konspektem 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))

Odwiedź od pod-węzła

Accept może być wywołana na dowolnym węźle, nie tylko na dokumencie głównym:

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

Obsługiwane typy węzłów

Odwiedzający obecnie rozdziela (dispatches) dla tych typów węzłów: Document, Page, Title, Outline, OutlineElement, RichText, Image. Nie ma metod odwiedzin dla Table, TableRow, TableCell, AttachedFile, lub NumberList — te węzły są osiągane poprzez GetChildNodes traversację zamiast tego.


Zobacz także

  • Dokument: węzeł główny; wywołanie doc.Accept(visitor) aby rozpocząć pełne przeglądanie
  • Strona: VisitPageStart / VisitPageEnd
  • Zarys: VisitOutlineStart / VisitOutlineEnd
  • RichText: VisitRichTextStart / VisitRichTextEnd
  • Obraz: VisitImageStart / VisitImageEnd
 Polski