DocumentVisitor — Aspose.Note FOSS for Python API Reference
Clasa: DocumentVisitor
Package: aspose.note Import: from aspose.note import DocumentVisitor
DocumentVisitor este clasa de bază abstractă pentru traversarea prin modelul vizitator al unui arbore de documente OneNote. Derivați din ea și suprascrieți doar metodele de vizitare de care aveți nevoie. Apelați node.Accept(visitor) pentru a începe traversarea de la orice nod; apelați doc.Accept(visitor) pentru a traversa întregul document.
Toate metodele din clasa de bază nu fac nimic (return None). Suprascrieți doar pe cele relevante pentru cazul dvs. de utilizare.
Metode de vizitare
| Method | Apelat când | Tip parametru |
|---|---|---|
VisitDocumentStart(document) | Intrare în Document nod | Document |
VisitDocumentEnd(document) | Părăsind un Document nod | Document |
VisitPageStart(page) | Intrând într-un Page nod | Page |
VisitPageEnd(page) | Părăsind un Page nod | Page |
VisitTitleStart(title) | Intrând într-un Title nod | Title |
VisitTitleEnd(title) | Părăsind un Title nod | Title |
VisitOutlineStart(outline) | Intrând într-un Outline nod | Outline |
VisitOutlineEnd(outline) | Părăsind un Outline nod | Outline |
VisitOutlineElementStart(outline_element) | Intrând într-un OutlineElement node | OutlineElement |
VisitOutlineElementEnd(outline_element) | Părăsind un OutlineElement node | OutlineElement |
VisitRichTextStart(rich_text) | Intrând într-un RichText nod | RichText |
VisitRichTextEnd(rich_text) | Părăsind un RichText nod | RichText |
VisitImageStart(image) | Intrare într-un Image nod | Image |
VisitImageEnd(image) | Părăsind un Image nod | Image |
Toate metodele au semnătura:
def VisitXxxStart(self, node: NodeType) -> None: ...
def VisitXxxEnd(self, node: NodeType) -> None: ...Ordinea de traversare
Accept distribuie într-o traversare în adâncime, preordine:
VisitDocumentStarteste apelat la intrarea în document.- Fiecare copil
Pageeste vizitat recursiv (PageStart → children → PageEnd). - Într-un
Page:TitleStart/End, apoi fiecareOutline(OutlineStart → OutlineElements → OutlineEnd). - Într-un
OutlineElement:OutlineElementStart, apoi copii (RichText,Image, elemente imbricate), apoiOutlineElementEnd. VisitDocumentEndeste apelat după ce toate paginile au fost vizitate.
Exemple de utilizare
Colectați toate titlurile paginilor
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)Numără nodurile după tip
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}")Extrage toate imaginile prin vizitator
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)")Construiește un raport de structură a documentului
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))Vizitează de la un sub-nod
Accept poate fi apelat pe orice nod, nu doar pe documentul rădăcină:
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())Tipuri de noduri suportate
Vizitatorul în prezent distribuie pentru aceste tipuri de noduri: Document, Page, Title, Outline, OutlineElement, RichText, Image. Nu există metode de vizitare pentru Table, TableRow, TableCell, AttachedFile, sau NumberList — acele noduri sunt accesate prin GetChildNodes traversare în schimb.