DocumentVisitor

DocumentVisitor — Aspose.Note FOSS for Python API Reference

Clasa: DocumentVisitor

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

DocumentVisitor este clasa de bază abstractă pentru traversarea prin modelul vizitator al unui arbore de documente OneNote. Derivați din ea și suprascrieți doar metodele de vizitare de care aveți nevoie. Apelați node.Accept(visitor) pentru a începe traversarea de la orice nod; apelați doc.Accept(visitor) pentru a traversa întregul document.

Toate metodele din clasa de bază nu fac nimic (return None). Suprascrieți doar pe cele relevante pentru cazul dvs. de utilizare.


Metode de vizitare

MethodApelat cândTip parametru
VisitDocumentStart(document)Intrare în Document nodDocument
VisitDocumentEnd(document)Părăsind un Document nodDocument
VisitPageStart(page)Intrând într-un Page nodPage
VisitPageEnd(page)Părăsind un Page nodPage
VisitTitleStart(title)Intrând într-un Title nodTitle
VisitTitleEnd(title)Părăsind un Title nodTitle
VisitOutlineStart(outline)Intrând într-un Outline nodOutline
VisitOutlineEnd(outline)Părăsind un Outline nodOutline
VisitOutlineElementStart(outline_element)Intrând într-un OutlineElement nodeOutlineElement
VisitOutlineElementEnd(outline_element)Părăsind un OutlineElement nodeOutlineElement
VisitRichTextStart(rich_text)Intrând într-un RichText nodRichText
VisitRichTextEnd(rich_text)Părăsind un RichText nodRichText
VisitImageStart(image)Intrare într-un Image nodImage
VisitImageEnd(image)Părăsind un Image nodImage

Toate metodele au semnătura:

def VisitXxxStart(self, node: NodeType) -> None: ...
def VisitXxxEnd(self, node: NodeType) -> None: ...

Ordinea de traversare

Accept distribuie într-o traversare în adâncime, preordine:

  1. VisitDocumentStart este apelat la intrarea în document.
  2. Fiecare copil Page este vizitat recursiv (PageStart → children → PageEnd).
  3. Într-un Page: TitleStart/End, apoi fiecare Outline (OutlineStart → OutlineElements → OutlineEnd).
  4. Într-un OutlineElement: OutlineElementStart, apoi copii (RichText, Image, elemente imbricate), apoi OutlineElementEnd.
  5. VisitDocumentEnd este apelat după ce toate paginile au fost vizitate.

Exemple de utilizare

Colectați toate titlurile paginilor

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)

Numără nodurile după tip

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}")

Extrage toate imaginile prin vizitator

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)")

Construiește un raport de structură a documentului

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))

Vizitează de la un sub-nod

Accept poate fi apelat pe orice nod, nu doar pe documentul rădăcină:

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())

Tipuri de noduri suportate

Vizitatorul în prezent distribuie pentru aceste tipuri de noduri: Document, Page, Title, Outline, OutlineElement, RichText, Image. Nu există metode de vizitare pentru Table, TableRow, TableCell, AttachedFile, sau NumberList — acele noduri sunt accesate prin GetChildNodes traversare în schimb.


Vezi și

  • Document: nod rădăcină; apel doc.Accept(visitor) pentru a începe traversarea completă
  • Pagină: VisitPageStart / VisitPageEnd
  • Schiță: VisitOutlineStart / VisitOutlineEnd
  • RichText: VisitRichTextStart / VisitRichTextEnd
  • Imagine: VisitImageStart / VisitImageEnd
 Română