DocumentVisitor

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 nodeDocument
VisitDocumentEnd(document)עוזב Document nodeDocument
VisitPageStart(page)נכנס ל Page nodePage
VisitPageEnd(page)עוזב Page nodePage
VisitTitleStart(title)נכנס ל Title nodeTitle
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 מבצע הפצות במעבר עומק-ראשון, סדר קדם:

  1. VisitDocumentStart נקרא בעת כניסת המסמך.
  2. כל צאצא Page נבדק באופן רקורסיבי (PageStart → children → PageEnd).
  3. בתוך Page: TitleStart/End, ואז כל Outline (OutlineStart → OutlineElements → OutlineEnd).
  4. בתוך OutlineElement: OutlineElementStart, ואז צאצאים (RichText, Image, אלמנטים מקוננים), ואז OutlineElementEnd.
  5. 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 מעבר במקום זאת.


ראה גם

  • מסמך: צומת שורש; קריאה doc.Accept(visitor) להתחיל במעבר מלא
  • דף: VisitPageStart / VisitPageEnd
  • מתווה: VisitOutlineStart / VisitOutlineEnd
  • RichText: VisitRichTextStart / VisitRichTextEnd
  • תמונה: VisitImageStart / VisitImageEnd
 עברית