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
| Method | Chamado quando | Tipo de parâmetro |
|---|---|---|
VisitDocumentStart(document) | Entrando em um Document nó | Document |
VisitDocumentEnd(document) | Saindo de um Document nó | Document |
VisitPageStart(page) | Entrando em um Page nó | Page |
VisitPageEnd(page) | Saindo de um Page nó | Page |
VisitTitleStart(title) | Entrando em um Title nó | Title |
VisitTitleEnd(title) | Saindo de um Title nó | Title |
VisitOutlineStart(outline) | Entrando em um Outline nó | Outline |
VisitOutlineEnd(outline) | Saindo de um Outline nó | Outline |
VisitOutlineElementStart(outline_element) | Entrando em um OutlineElement nó | OutlineElement |
VisitOutlineElementEnd(outline_element) | Saindo de um OutlineElement nó | OutlineElement |
VisitRichTextStart(rich_text) | Entrando em um RichText nó | RichText |
VisitRichTextEnd(rich_text) | Saindo de um RichText nó | RichText |
VisitImageStart(image) | Entrando em um Image nó | Image |
VisitImageEnd(image) | Saindo de um Image nó | Image |
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:
VisitDocumentStarté chamado ao entrar no documento.- Cada filho
Pageé visitado recursivamente (PageStart → children → PageEnd). - Dentro de um
Page:TitleStart/End, então cadaOutline(OutlineStart → OutlineElements → OutlineEnd). - Dentro de um
OutlineElement:OutlineElementStart, então filhos (RichText,Image, elementos aninhados), entãoOutlineElementEnd. 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.