DocumentVisitor — Aspose.Note FOSS for Python API Reference
Classe: DocumentVisitor
Package: aspose.note Import: from aspose.note import DocumentVisitor
DocumentVisitor és la classe base abstracta per al recorregut amb patró visitor d’un arbre de documents OneNote. Crea una subclasse i sobreescriu només els mètodes de visita que necessitis. Crida node.Accept(visitor) per iniciar el recorregut des de qualsevol node; crida doc.Accept(visitor) per recórrer tot el document.
Tots els mètodes de la classe base són operacions nul·les (retorna None). Sobreescriu només els que siguin rellevants per al teu cas d’ús.
Mètodes de visita
| Method | Cridat quan | Tipus de paràmetre |
|---|---|---|
VisitDocumentStart(document) | Entrant a Document node | Document |
VisitDocumentEnd(document) | Sortint d’un Document node | Document |
VisitPageStart(page) | Entrant a Page node | Page |
VisitPageEnd(page) | Sortint d’un Page node | Page |
VisitTitleStart(title) | Entrant a Title node | Title |
VisitTitleEnd(title) | Sortint d’un Title node | Title |
VisitOutlineStart(outline) | Entrant en una Outline node | Outline |
VisitOutlineEnd(outline) | Sortint d’una Outline node | Outline |
VisitOutlineElementStart(outline_element) | Entrant un OutlineElement node | OutlineElement |
VisitOutlineElementEnd(outline_element) | Sortint un OutlineElement node | OutlineElement |
VisitRichTextStart(rich_text) | Entrant un RichText node | RichText |
VisitRichTextEnd(rich_text) | Sortint d’un RichText node | RichText |
VisitImageStart(image) | Entrant una Image node | Image |
VisitImageEnd(image) | Sortint d’un Image node | Image |
Tots els mètodes tenen la signatura:
def VisitXxxStart(self, node: NodeType) -> None: ...
def VisitXxxEnd(self, node: NodeType) -> None: ...Ordre de recorregut
Accept despèssa en un recorregut en profunditat, preordre:
VisitDocumentStartes crida en entrar al document.- Cada fill
Pagees visita recursivament (PageStart → children → PageEnd). - Dins d’un
Page:TitleStart/End, després de cadaOutline(OutlineStart → OutlineElements → OutlineEnd). - Dins d’una
OutlineElement:OutlineElementStart, després de fills (RichText,Image, elements imbricats), desprésOutlineElementEnd. VisitDocumentEndes crida després que totes les pàgines hagin estat visitades.
Exemples d’ús
Recull tots els títols de les pàgines
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)Compta nodes per tipus
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}")Extreu totes les imatges mitjançant el visitador
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)")Construeix un informe de l’esquema del document
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 des d’un subnode
Accept pot ser cridat en qualsevol node, no només en el document arrel:
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())Tipus de nodes compatibles
El visitador actualment despacha per a aquests tipus de nodes: Document, Page, Title, Outline, OutlineElement, RichText, Image. No hi ha mètodes de visita per a Table, TableRow, TableCell, AttachedFile, o NumberList — aquests nodes es troben a través de GetChildNodes recorregut en canvi.