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

  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