DocumentVisitor — Aspose.Note FOSS for Python API Reference

Classe: DocumentVisitor

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

DocumentVisitor és la classe base abstracta per al recorregut amb patró visitor d’un arbre de documents OneNote. Crea una subclasse i sobreescriu només els mètodes de visita que necessitis. Crida node.Accept(visitor) per iniciar el recorregut des de qualsevol node; crida doc.Accept(visitor) per recórrer tot el document.

Tots els mètodes de la classe base són operacions nul·les (retorna None). Sobreescriu només els que siguin rellevants per al teu cas d’ús.


Mètodes de visita

MethodCridat quanTipus de paràmetre
VisitDocumentStart(document)Entrant a Document nodeDocument
VisitDocumentEnd(document)Sortint d’un Document nodeDocument
VisitPageStart(page)Entrant a Page nodePage
VisitPageEnd(page)Sortint d’un Page nodePage
VisitTitleStart(title)Entrant a Title nodeTitle
VisitTitleEnd(title)Sortint d’un Title nodeTitle
VisitOutlineStart(outline)Entrant en una Outline nodeOutline
VisitOutlineEnd(outline)Sortint d’una Outline nodeOutline
VisitOutlineElementStart(outline_element)Entrant un OutlineElement nodeOutlineElement
VisitOutlineElementEnd(outline_element)Sortint un OutlineElement nodeOutlineElement
VisitRichTextStart(rich_text)Entrant un RichText nodeRichText
VisitRichTextEnd(rich_text)Sortint d’un RichText nodeRichText
VisitImageStart(image)Entrant una Image nodeImage
VisitImageEnd(image)Sortint d’un Image nodeImage

Tots els mètodes tenen la signatura:

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

Ordre de recorregut

Accept despèssa en un recorregut en profunditat, preordre:

  1. VisitDocumentStart es crida en entrar al document.
  2. Cada fill Page es visita recursivament (PageStart → children → PageEnd).
  3. Dins d’un Page: TitleStart/End, després de cada Outline (OutlineStart → OutlineElements → OutlineEnd).
  4. Dins d’una OutlineElement: OutlineElementStart, després de fills (RichText, Image, elements imbricats), després OutlineElementEnd.
  5. VisitDocumentEnd es crida després que totes les pàgines hagin estat visitades.

Exemples d’ús

Recull tots els títols de les pàgines

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)

Compta nodes per tipus

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

Extreu totes les imatges mitjançant el visitador

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

Construeix un informe de l’esquema del document

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

Visita des d’un subnode

Accept pot ser cridat en qualsevol node, no només en el document arrel:

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

Tipus de nodes compatibles

El visitador actualment despacha per a aquests tipus de nodes: Document, Page, Title, Outline, OutlineElement, RichText, Image. No hi ha mètodes de visita per a Table, TableRow, TableCell, AttachedFile, o NumberList — aquests nodes es troben a través de GetChildNodes recorregut en canvi.


Vegeu també

  • Document: node arrel; crida doc.Accept(visitor) per iniciar un recorregut complet
  • Pàgina: VisitPageStart / VisitPageEnd
  • Esquema: VisitOutlineStart / VisitOutlineEnd
  • RichText: VisitRichTextStart / VisitRichTextEnd
  • Imatge: VisitImageStart / VisitImageEnd
 Català