DocumentVisitor — Aspose.Note FOSS for Python API Reference
Klasė: DocumentVisitor
Package: aspose.note Import: from aspose.note import DocumentVisitor
DocumentVisitor yra abstrakti bazinė klasė, skirta visitor‑pattern OneNote dokumento medžio perėjimui. Sukurkite iš jos išvestinę klasę ir perrašykite tik reikiamus visit metodus. Iškvieskite node.Accept(visitor) pradėti perėjimą nuo bet kurio mazgo; iškvieskite doc.Accept(visitor) peržvelgti visą dokumentą.
Visų bazinės klasės metodų nėra (grąžina None). Perrašykite tik tuos, kurie yra svarbūs jūsų naudojimo atvejui.
Lankymo metodai
| Method | Iškviečiamas, kai | Parametro tipas |
|---|---|---|
VisitDocumentStart(document) | Įeinama į Document mazgą | Document |
VisitDocumentEnd(document) | Išeinama iš Document mazgo | Document |
VisitPageStart(page) | Įeinama į Page mazgą | Page |
VisitPageEnd(page) | Išeinama iš Page mazgo | Page |
VisitTitleStart(title) | Įeinama į Title mazgą | Title |
VisitTitleEnd(title) | Palikdamas a Title node | Title |
VisitOutlineStart(outline) | Įeinant į Outline node | Outline |
VisitOutlineEnd(outline) | Palikdamas Outline mazgas | Outline |
VisitOutlineElementStart(outline_element) | Įeinant į OutlineElement mazgas | OutlineElement |
VisitOutlineElementEnd(outline_element) | Paliekant OutlineElement mazgas | OutlineElement |
VisitRichTextStart(rich_text) | Įvedama RichText node | RichText |
VisitRichTextEnd(rich_text) | Palikdamas a RichText node | RichText |
VisitImageStart(image) | Įeinant į Image mazgas | Image |
VisitImageEnd(image) | Paliekant Image mazgas | Image |
Visų metodų parašas:
def VisitXxxStart(self, node: NodeType) -> None: ...
def VisitXxxEnd(self, node: NodeType) -> None: ...Perėjimo tvarka
Accept išsiunčia giliojo pirmumo, priešužsakymo (pre‑order) perėjimą:
VisitDocumentStartkviečiamas įeinant į dokumentą.- Kiekvienas vaikas
Pageyra lankomas rekursyviai (PageStart → children → PageEnd). - Viduje
Page:TitleStart/End, tada kiekvienasOutline(OutlineStart → OutlineElements → OutlineEnd). - Per
OutlineElement:OutlineElementStart, tada vaikai (RichText,Image, įdėtiniai elementai), tadaOutlineElementEnd. VisitDocumentEndyra iškviečiamas po to, kai visos puslapiai buvo aplankyti.
Naudojimo pavyzdžiai
Surinkti visus puslapių pavadinimus
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)Skaičiuoti mazgus pagal 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}")Išgauti visas nuotraukas per lankytoją
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)")Sukurti dokumento struktūros ataskaitą
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))Aplankyti iš submazgo
Accept gali būti iškviestas bet kuriame mazge, ne tik šakniniame dokumente:
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())Palaikomi mazgų tipai
Lankytojas šiuo metu paskirsto šiuos mazgo tipus: Document, Page, Title, Outline, OutlineElement, RichText, Image. Nėra lankymo metodų, skirtų Table, TableRow, TableCell, AttachedFile, arba NumberList — tie mazgai pasiekiami per GetChildNodes traversal vietoje.
Žr. taip pat
- Dokumentas: šakninis mazgas; iškviesti
doc.Accept(visitor)pradėti pilną perėjimą - Puslapis:
VisitPageStart/VisitPageEnd - Struktūra:
VisitOutlineStart/VisitOutlineEnd - RichText:
VisitRichTextStart/VisitRichTextEnd - Vaizdas:
VisitImageStart/VisitImageEnd