DocumentVisitor

DocumentVisitor — Aspose.Note FOSS for Python API Reference

Clase: DocumentVisitor

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

DocumentVisitor es la clase base abstracta para el recorrido con patrón visitante de un árbol de documentos OneNote. Derívala y sobrescribe solo los métodos de visita que necesites. Llama node.Accept(visitor) para iniciar el recorrido desde cualquier nodo; llama doc.Accept(visitor) para recorrer todo el documento.

Todos los métodos en la clase base no hacen nada (devuelven None). Sobrescribe solo los que sean relevantes para tu caso de uso.


Métodos de visita

MethodSe llama cuandoTipo de parámetro
VisitDocumentStart(document)Entrando en un Document nodoDocument
VisitDocumentEnd(document)Saliendo de un Document nodoDocument
VisitPageStart(page)Entrando en un Page nodoPage
VisitPageEnd(page)Saliendo de un Page nodoPage
VisitTitleStart(title)Entrando en un Title nodoTitle
VisitTitleEnd(title)Saliendo de un Title nodoTitle
VisitOutlineStart(outline)Entrando a un Outline nodoOutline
VisitOutlineEnd(outline)Saliendo de un Outline nodoOutline
VisitOutlineElementStart(outline_element)Entrando a un OutlineElement nodoOutlineElement
VisitOutlineElementEnd(outline_element)Saliendo de un OutlineElement nodoOutlineElement
VisitRichTextStart(rich_text)Entrando a una RichText nodoRichText
VisitRichTextEnd(rich_text)Saliendo de una RichText nodoRichText
VisitImageStart(image)Entrando en un Image nodoImage
VisitImageEnd(image)Saliendo de un Image nodoImage

Todos los métodos tienen la firma:

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

Orden de recorrido

Accept despachos en un recorrido en profundidad, preorden:

  1. VisitDocumentStart se llama al entrar al documento.
  2. Cada hijo Page se visita recursivamente (PageStart → children → PageEnd).
  3. Dentro de un Page: TitleStart/End, luego cada Outline (OutlineStart → OutlineElements → OutlineEnd).
  4. Dentro de un OutlineElement: OutlineElementStart, luego hijos (RichText, Image, elementos anidados), luego OutlineElementEnd.
  5. VisitDocumentEnd se llama después de que se hayan visitado todas las páginas.

Ejemplos de uso

Recopila todos los títulos de página

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)

Contar nodos por tipo

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

Extraer todas las imágenes mediante el visitante

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

Crear un informe del esquema del documento

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

Visitar desde un subnodo

Accept puede llamarse en cualquier nodo, no solo en el documento raíz:

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

Tipos de nodo compatibles

El visitante actualmente despacha para estos tipos de nodo: Document, Page, Title, Outline, OutlineElement, RichText, Image. No existen métodos de visita para Table, TableRow, TableCell, AttachedFile, o NumberList — esos nodos se alcanzan mediante GetChildNodes recorrido en su lugar.


Ver también

  • Documento: nodo raíz; llamar doc.Accept(visitor) para iniciar el recorrido completo
  • Página: VisitPageStart / VisitPageEnd
  • Esquema: VisitOutlineStart / VisitOutlineEnd
  • RichText: VisitRichTextStart / VisitRichTextEnd
  • Imagen: VisitImageStart / VisitImageEnd
 Español