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 node | Title |
VisitOutlineStart(outline) | Εισαγωγή σε ένα Outline node | 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 διάσχιση αντί αυτού.
Δείτε επίσης
- Έγγραφο: ριζικός κόμβος; καλέστε
doc.Accept(visitor)για να ξεκινήσει η πλήρης διάσχιση - Σελίδα:
VisitPageStart/VisitPageEnd - Περίγραμμα:
VisitOutlineStart/VisitOutlineEnd - RichText:
VisitRichTextStart/VisitRichTextEnd - Εικόνα:
VisitImageStart/VisitImageEnd