DocumentVisitor

DocumentVisitor — Aspose.Note FOSS for Python API Reference

Classe: DocumentVisitor

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

DocumentVisitor è la classe base astratta per l’attraversamento con pattern visitor di un albero di documenti OneNote. Derivane e sovrascrivi solo i metodi di visita di cui hai bisogno. Chiama node.Accept(visitor) per avviare l’attraversamento da qualsiasi nodo; chiama doc.Accept(visitor) per attraversare l’intero documento.

Tutti i metodi nella classe base non fanno nulla (ritornano None). Sovrascrivi solo quelli rilevanti per il tuo caso d’uso.


Metodi di visita

MethodChiamato quandoTipo di parametro
VisitDocumentStart(document)Entrando in un Document nodoDocument
VisitDocumentEnd(document)Uscendo da un Document nodeDocument
VisitPageStart(page)Entrando in un Page nodePage
VisitPageEnd(page)Uscendo da un Page nodePage
VisitTitleStart(title)Entrando in un Title nodoTitle
VisitTitleEnd(title)Lasciando un Title nodoTitle
VisitOutlineStart(outline)Entrando in un Outline nodoOutline
VisitOutlineEnd(outline)Uscendo da un Outline nodoOutline
VisitOutlineElementStart(outline_element)Entrando in un OutlineElement nodoOutlineElement
VisitOutlineElementEnd(outline_element)Uscendo da un OutlineElement nodoOutlineElement
VisitRichTextStart(rich_text)Entrando in un RichText nodoRichText
VisitRichTextEnd(rich_text)Lasciando un RichText nodoRichText
VisitImageStart(image)Entrando in un Image nodoImage
VisitImageEnd(image)Lasciando un Image nodoImage

Tutti i metodi hanno la firma:

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

Ordine di attraversamento

Accept invia in un attraversamento depth-first, pre-order:

  1. VisitDocumentStart viene chiamato all’ingresso del documento.
  2. Ogni figlio Page viene visitato ricorsivamente (PageStart → children → PageEnd).
  3. All’interno di un Page: TitleStart/End, quindi ogni Outline (OutlineStart → OutlineElements → OutlineEnd).
  4. All’interno di un OutlineElement: OutlineElementStart, poi i figli (RichText, Image, elementi annidati), poi OutlineElementEnd.
  5. VisitDocumentEnd viene chiamato dopo che tutte le pagine sono state visitate.

Esempi d’uso

Raccogli tutti i titoli delle pagine

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)

Conta i nodi per 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}")

Estrai tutte le immagini tramite il visitor

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

Crea un report della struttura 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))

Visita da un sotto-nodo

Accept può essere chiamato su qualsiasi nodo, non solo sul documento radice:

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

Tipi di nodo supportati

Il visitor attualmente gestisce questi tipi di nodo: Document, Page, Title, Outline, OutlineElement, RichText, Image. Non ci sono metodi di visita per Table, TableRow, TableCell, AttachedFile, o NumberList — quei nodi sono raggiunti tramite GetChildNodes attraversamento invece.


Vedi anche

  • Documento: nodo radice; chiama doc.Accept(visitor) per avviare l’intero attraversamento
  • Pagina: VisitPageStart / VisitPageEnd
  • Schema: VisitOutlineStart / VisitOutlineEnd
  • RichText: VisitRichTextStart / VisitRichTextEnd
  • Immagine: VisitImageStart / VisitImageEnd
 Italiano