DocumentVisitor — Aspose.Note FOSS for Python API Reference
คลาส: DocumentVisitor
Package: aspose.note Import: from aspose.note import DocumentVisitor
DocumentVisitor เป็นคลาสฐานแบบนามธรรมสำหรับการเดินทางแบบ visitor-pattern ของโครงสร้างต้นไม้เอกสาร OneNote. สร้างคลาสย่อยจากมันและเขียนทับเฉพาะเมธอด visit ที่คุณต้องการ. เรียก node.Accept(visitor) เพื่อเริ่มการเดินทางจากโหนดใดก็ได้; เรียก doc.Accept(visitor) เพื่อเดินทางทั่วทั้งเอกสาร.
เมธอดทั้งหมดในคลาสฐานเป็น no-ops (return None). Override เฉพาะที่เกี่ยวข้องกับกรณีการใช้งานของคุณเท่านั้น.
เมธอด Visit
| Method | ถูกเรียกเมื่อ | ประเภทพารามิเตอร์ |
|---|---|---|
VisitDocumentStart(document) | กำลังเข้าสู่ Document โหนด | Document |
VisitDocumentEnd(document) | กำลังออกจาก Document โหนด | Document |
VisitPageStart(page) | กำลังเข้าสู่ Page โหนด | Page |
VisitPageEnd(page) | กำลังออกจาก Page โหนด | Page |
VisitTitleStart(title) | กำลังเข้าสู่ Title โหนด | Title |
VisitTitleEnd(title) | กำลังออกจาก Title node | Title |
VisitOutlineStart(outline) | กำลังเข้าสู่ Outline node | Outline |
VisitOutlineEnd(outline) | การออกจาก Outline โหนด | Outline |
VisitOutlineElementStart(outline_element) | กำลังเข้าสู่ OutlineElement โหนด | OutlineElement |
VisitOutlineElementEnd(outline_element) | กำลังออกจาก OutlineElement โหนด | OutlineElement |
VisitRichTextStart(rich_text) | กำลังเข้าสู่ a RichText node | RichText |
VisitRichTextEnd(rich_text) | การออกจาก RichText node | RichText |
VisitImageStart(image) | กำลังเข้าสู่ Image โหนด | Image |
VisitImageEnd(image) | กำลังออกจาก Image โหนด | Image |
เมธอดทั้งหมดมีลายเซ็นดังนี้:
def VisitXxxStart(self, node: NodeType) -> None: ...
def VisitXxxEnd(self, node: NodeType) -> None: ...ลำดับการเดินทาง
Accept กระจายในการท่องแบบลึก-แรก (depth-first, pre-order):
VisitDocumentStartจะถูกเรียกเมื่อเข้าสู่เอกสาร.- แต่ละ child
Pageจะถูกเยี่ยมชมแบบเรียกซ้ำ (PageStart → children → PageEnd). - ภายใน a
Page:TitleStart/End, แล้วแต่ละOutline(OutlineStart → OutlineElements → OutlineEnd). - ภายใน an
OutlineElement:OutlineElementStart, แล้ว children (RichText,Image, nested elements), แล้วOutlineElementEnd. VisitDocumentEndจะถูกเรียกหลังจากที่หน้าทั้งหมดถูกเยี่ยมชมแล้ว.
ตัวอย่างการใช้งาน
รวบรวมชื่อเรื่องของทุกหน้า
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)นับโหนดตามประเภท
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}")ดึงรูปภาพทั้งหมดผ่าน 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)")สร้างรายงานโครงร่างเอกสาร
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))เยี่ยมชมจากโหนดย่อย
Accept สามารถเรียกใช้บนโหนดใดก็ได้ ไม่ใช่แค่เอกสารราก:
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())ประเภทโหนดที่รองรับ
ผู้เยี่ยมชมปัจจุบันจัดการการส่งต่อสำหรับประเภทโหนดเหล่านี้: Document, Page, Title, Outline, OutlineElement, RichText, Image. ไม่มีเมธอด visit สำหรับ Table, TableRow, TableCell, AttachedFile, หรือ NumberList — โหนดเหล่านั้นเข้าถึงผ่าน GetChildNodes การท่องแทน.