DocumentVisitor

DocumentVisitor — Aspose.Note FOSS for Python API Reference

Classe: DocumentVisitor

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

DocumentVisitor é a classe base abstrata para travessia em padrão visitor de uma árvore de documentos do OneNote. Subclasse-a e sobrescreva apenas os métodos de visita que você precisar. Chame node.Accept(visitor) para iniciar a travessia a partir de qualquer nó; chame doc.Accept(visitor) para percorrer todo o documento.

Todos os métodos na classe base não fazem nada (retornam None). Sobrescreva apenas os que são relevantes para o seu caso de uso.


Métodos de Visita

MethodChamado quandoTipo de parâmetro
VisitDocumentStart(document)Entrando em um DocumentDocument
VisitDocumentEnd(document)Saindo de um DocumentDocument
VisitPageStart(page)Entrando em um PagePage
VisitPageEnd(page)Saindo de um PagePage
VisitTitleStart(title)Entrando em um TitleTitle
VisitTitleEnd(title)Saindo de um TitleTitle
VisitOutlineStart(outline)Entrando em um OutlineOutline
VisitOutlineEnd(outline)Saindo de um OutlineOutline
VisitOutlineElementStart(outline_element)Entrando em um OutlineElementOutlineElement
VisitOutlineElementEnd(outline_element)Saindo de um OutlineElementOutlineElement
VisitRichTextStart(rich_text)Entrando em um RichTextRichText
VisitRichTextEnd(rich_text)Saindo de um RichTextRichText
VisitImageStart(image)Entrando em um ImageImage
VisitImageEnd(image)Saindo de um ImageImage

Todos os métodos têm a assinatura:

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

Ordem de Travessia

Accept despachos em uma travessia em profundidade, pré-ordem:

  1. VisitDocumentStart é chamado ao entrar no documento.
  2. Cada filho Page é visitado recursivamente (PageStart → children → PageEnd).
  3. Dentro de um Page: TitleStart/End, então cada Outline (OutlineStart → OutlineElements → OutlineEnd).
  4. Dentro de um OutlineElement: OutlineElementStart, então filhos (RichText, Image, elementos aninhados), então OutlineElementEnd.
  5. VisitDocumentEnd é chamado após todas as páginas terem sido visitadas.

Exemplos de Uso

Coletar todos os títulos das páginas

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 nós 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}")

Extrair todas as imagens via 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)")

Criar um relatório de estrutura de 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 a partir de um subnó

Accept pode ser chamado em qualquer nó, não apenas no documento raiz:

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 Nó Suportados

O visitante atualmente despacha para esses tipos de nó: Document, Page, Title, Outline, OutlineElement, RichText, Image. Não há métodos de visita para Table, TableRow, TableCell, AttachedFile, ou NumberList — esses nós são alcançados via GetChildNodes travessia em vez disso.


Veja Também

  • Documento: nó raiz; chamar doc.Accept(visitor) para iniciar a travessia completa
  • Página: VisitPageStart / VisitPageEnd
  • Esboço: VisitOutlineStart / VisitOutlineEnd
  • RichText: VisitRichTextStart / VisitRichTextEnd
  • Imagem: VisitImageStart / VisitImageEnd
 Português