DocumentVisitor — Aspose.Note FOSS for Python API Reference
Kelas: DocumentVisitor
Package: aspose.note Import: from aspose.note import DocumentVisitor
DocumentVisitor adalah kelas asas abstrak untuk penjelajahan pola pelawat bagi pokok dokumen OneNote. Subkelaskan ia dan gantikan hanya kaedah lawatan yang anda perlukan. Panggil node.Accept(visitor) untuk memulakan penjelajahan dari mana-mana nod; panggil doc.Accept(visitor) untuk menelusuri keseluruhan dokumen.
Semua kaedah dalam kelas asas tidak melakukan apa-apa (kembali None). Gantikan hanya yang relevan dengan kes penggunaan anda.
Kaedah Lawatan
| Method | Dipanggil apabila | Jenis parameter |
|---|---|---|
VisitDocumentStart(document) | Memasuki satu Document node | Document |
VisitDocumentEnd(document) | Meninggalkan satu Document node | Document |
VisitPageStart(page) | Memasuki satu Page node | Page |
VisitPageEnd(page) | Meninggalkan satu Page node | Page |
VisitTitleStart(title) | Memasuki satu Title node | Title |
VisitTitleEnd(title) | Meninggalkan Title node | Title |
VisitOutlineStart(outline) | Memasuki satu Outline node | Outline |
VisitOutlineEnd(outline) | Meninggalkan satu Outline node | Outline |
VisitOutlineElementStart(outline_element) | Memasuki satu OutlineElement node | OutlineElement |
VisitOutlineElementEnd(outline_element) | Meninggalkan satu OutlineElement node | OutlineElement |
VisitRichTextStart(rich_text) | Memasuki satu RichText node | RichText |
VisitRichTextEnd(rich_text) | Meninggalkan satu RichText node | RichText |
VisitImageStart(image) | Memasuki satu Image node | Image |
VisitImageEnd(image) | Meninggalkan satu Image node | Image |
Semua kaedah mempunyai tandatangan:
def VisitXxxStart(self, node: NodeType) -> None: ...
def VisitXxxEnd(self, node: NodeType) -> None: ...Urutan Penelusuran
Accept dispatches dalam penelusuran depth-first, pre-order:
VisitDocumentStartdipanggil semasa memasuki dokumen.- Setiap anak
Pagedilawati secara rekursif (PageStart → children → PageEnd). - Dalam satu
Page:TitleStart/End, kemudian setiapOutline(OutlineStart → OutlineElements → OutlineEnd). - Dalam satu
OutlineElement:OutlineElementStart, kemudian anak-anak (RichText,Image, elemen bersarang), kemudianOutlineElementEnd. VisitDocumentEnddipanggil selepas semua halaman telah dilawati.
Contoh Penggunaan
Kumpulkan semua tajuk halaman
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)Kira nod mengikut jenis
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}")Ekstrak semua imej melalui pelawat
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)")Bina laporan rangka dokumen
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))Lawati dari sub-nod
Accept boleh dipanggil pada mana-mana nod, bukan hanya dokumen akar:
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())Jenis Nod yang Disokong
Pengunjung kini memanggil untuk jenis nod berikut: Document, Page, Title, Outline, OutlineElement, RichText, Image. Tiada kaedah lawatan untuk Table, TableRow, TableCell, AttachedFile, atau NumberList — nod‑nod tersebut dicapai melalui GetChildNodes penelusuran sebagai gantinya.
Lihat Juga
- Dokumen: nod akar; panggil
doc.Accept(visitor)untuk memulakan penelusuran penuh - Halaman:
VisitPageStart/VisitPageEnd - Garis Besar:
VisitOutlineStart/VisitOutlineEnd - RichText:
VisitRichTextStart/VisitRichTextEnd - Imej:
VisitImageStart/VisitImageEnd