DocumentVisitor — Aspose.Note FOSS for Python API Reference

Κλάση: DocumentVisitor

Package: aspose.note Import: from aspose.note import DocumentVisitor

DocumentVisitor είναι η αφηρημένη βασική κλάση για τη διάσχιση με το μοτίβο επισκέπτη ενός δέντρου εγγράφου OneNote. Υποκλάστε την και παρακάμψτε μόνο τις μεθόδους visit που χρειάζεστε. Κλήση node.Accept(visitor) για να ξεκινήσετε τη διάσχιση από οποιονδήποτε κόμβο· κλήση doc.Accept(visitor) για να διασχίσετε ολόκληρο το έγγραφο.

Όλες οι μέθοδοι στην βασική κλάση είναι no-ops (επιστρέφουν None). Παράκαμψη μόνο των εκείνων που είναι σχετικές με την περίπτωσή σας.


Μέθοδοι Επίσκεψης

MethodΚαλείται ότανΤύπος παραμέτρου
VisitDocumentStart(document)Είσοδος σε ένα Document κόμβοςDocument
VisitDocumentEnd(document)Έξοδος από ένα Document κόμβοςDocument
VisitPageStart(page)Είσοδος σε ένα Page κόμβοςPage
VisitPageEnd(page)Έξοδος από ένα Page κόμβοςPage
VisitTitleStart(title)Είσοδος σε ένα Title κόμβοςTitle
VisitTitleEnd(title)Αφήνοντας ένα Title nodeTitle
VisitOutlineStart(outline)Εισαγωγή σε ένα Outline nodeOutline
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
 Ελληνικά