DocumentVisitor — Aspose.Note FOSS for Python API Reference
Klase: DocumentVisitor
Package: aspose.note Import: from aspose.note import DocumentVisitor
DocumentVisitor ir abstraktā pamata klase apmeklētāja modeļa pārlūkošanai OneNote dokumenta koka struktūrā. Izveidojiet apakšklasi un pārrakstiet tikai tās apmeklējuma metodes, kuras jums vajag. Izsauciet node.Accept(visitor) lai sāktu pārlūkošanu no jebkura mezgla; izsauciet doc.Accept(visitor) lai pārlūkotu visu dokumentu.
Visas metodes pamata klasē ir neizpildes (atgriež None). Pārrakstiet tikai tās, kas ir būtiskas jūsu lietošanas gadījumam.
Apmeklējuma metodes
| Method | Izsaukts, kad | Parametra tips |
|---|---|---|
VisitDocumentStart(document) | Ienākot Document mezgls | Document |
VisitDocumentEnd(document) | Iziet Document mezgls | Document |
VisitPageStart(page) | Ienākot Page mezgls | Page |
VisitPageEnd(page) | Iziet Page mezgls | Page |
VisitTitleStart(title) | Ienākot Title mezgls | Title |
VisitTitleEnd(title) | Atstājot a Title node | Title |
VisitOutlineStart(outline) | Ievadot an Outline node | Outline |
VisitOutlineEnd(outline) | Aiziet Outline mezgls | Outline |
VisitOutlineElementStart(outline_element) | Ienākot OutlineElement mezgls | OutlineElement |
VisitOutlineElementEnd(outline_element) | Iziet OutlineElement mezgls | OutlineElement |
VisitRichTextStart(rich_text) | Ievadot RichText node | RichText |
VisitRichTextEnd(rich_text) | Pamest a RichText node | RichText |
VisitImageStart(image) | Ievadot an Image node | Image |
VisitImageEnd(image) | Atstājot Image node | Image |
Visām metodēm ir šī paraksts:
def VisitXxxStart(self, node: NodeType) -> None: ...
def VisitXxxEnd(self, node: NodeType) -> None: ...Pārlūkošanas secība
Accept izsauc dziļuma pirmā, priekšpēdas pārlūkošanā:
VisitDocumentStarttiek izsaukts, ieejot dokumentā.- Katrs bērns
Pagetiek apmeklēts rekursīvi (PageStart → children → PageEnd). - Iekš
Page:TitleStart/End, tad katrsOutline(OutlineStart → OutlineElements → OutlineEnd). - Iekšā
OutlineElement:OutlineElementStart, tad bērni (RichText,Image, iegultie elementi), tadOutlineElementEnd. VisitDocumentEndtiek izsaukts pēc tam, kad visas lapas ir apmeklētas.
Lietošanas piemēri
Savāciet visas lapu virsrakstus
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)Skaitīt mezglus pēc tipa
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}")Izgūt visus attēlus, izmantojot 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)")Izveidot dokumenta struktūras pārskatu
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))Apmeklēt no apakšmezgla
Accept var tikt izsaukts uz jebkura mezgla, ne tikai uz saknes dokumenta:
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())Atbalstītie mezglu tipi
Apmeklētājs pašlaik izsauc šādus mezglu tipus: Document, Page, Title, Outline, OutlineElement, RichText, Image. Nav apmeklējuma metodes priekš Table, TableRow, TableCell, AttachedFile, vai NumberList — šie mezgli tiek sasniegti caur GetChildNodes pārlūkošana tā vietā.