DocumentVisitor — Aspose.Note FOSS for Python API Reference
מחלקה: DocumentVisitor
Package: aspose.note Import: from aspose.note import DocumentVisitor
DocumentVisitor הוא המחלקה הבסיסית המופשטת לניווט בתבנית מבקר של עץ מסמכי OneNote. צור מחלקה נגזרת ממנו והחלף רק את שיטות הביקור שאתה צריך. קרא node.Accept(visitor) כדי להתחיל ניווט מכל צומת; קרא doc.Accept(visitor) כדי לעבור על כל המסמך.
כל השיטות במחלקה הבסיסית הן ללא פעולה (מחזירות None). יש לעקוף רק את אלו הרלוונטיים למקרה השימוש שלך.
שיטות ביקור
| Method | נקרא כאשר | סוג פרמטר |
|---|---|---|
VisitDocumentStart(document) | נכנס ל Document node | Document |
VisitDocumentEnd(document) | עוזב Document node | Document |
VisitPageStart(page) | נכנס ל Page node | Page |
VisitPageEnd(page) | עוזב Page node | Page |
VisitTitleStart(title) | נכנס ל Title node | Title |
VisitTitleEnd(title) | עוזב Title צומת | Title |
VisitOutlineStart(outline) | נכנס Outline צומת | Outline |
VisitOutlineEnd(outline) | עוזב Outline צומת | Outline |
VisitOutlineElementStart(outline_element) | נכנס OutlineElement צומת | OutlineElement |
VisitOutlineElementEnd(outline_element) | עוזב OutlineElement צומת | OutlineElement |
VisitRichTextStart(rich_text) | נכנס RichText צומת | RichText |
VisitRichTextEnd(rich_text) | עוזב RichText צומת | RichText |
VisitImageStart(image) | נכנס Image צומת | Image |
VisitImageEnd(image) | עוזב Image צומת | Image |
לכל השיטות יש את החתימה:
def VisitXxxStart(self, node: NodeType) -> None: ...
def VisitXxxEnd(self, node: NodeType) -> None: ...סדר הניווט
Accept מבצע הפצות במעבר עומק-ראשון, סדר קדם:
VisitDocumentStartנקרא בעת כניסת המסמך.- כל צאצא
Pageנבדק באופן רקורסיבי (PageStart → children → PageEnd). - בתוך
Page:TitleStart/End, ואז כלOutline(OutlineStart → OutlineElements → OutlineEnd). - בתוך
OutlineElement:OutlineElementStart, ואז צאצאים (RichText,Image, אלמנטים מקוננים), ואז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}")חילץ את כל התמונות באמצעות המבקר
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. אין שיטות ביקור עבור Table, TableRow, TableCell, AttachedFile, או NumberList — צמתים אלה נגישים דרך GetChildNodes מעבר במקום זאת.