DocumentVisitor — Aspose.Note FOSS for Python API Reference

Kelas: DocumentVisitor

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

DocumentVisitor adalah kelas dasar abstrak untuk penelusuran pola visitor pada pohon dokumen OneNote. Subclass-kan dan timpa hanya metode visit yang Anda butuhkan. Panggil node.Accept(visitor) untuk memulai penelusuran dari node mana pun; panggil doc.Accept(visitor) untuk menelusuri seluruh dokumen.

Semua metode dalam kelas dasar tidak melakukan apa-apa (mengembalikan None). Hanya timpa yang relevan dengan kasus penggunaan Anda.


Metode Kunjungan

MethodDipanggil ketikaTipe parameter
VisitDocumentStart(document)Memasuki Document nodeDocument
VisitDocumentEnd(document)Meninggalkan Document nodeDocument
VisitPageStart(page)Memasuki Page nodePage
VisitPageEnd(page)Meninggalkan Page nodePage
VisitTitleStart(title)Memasuki Title nodeTitle
VisitTitleEnd(title)Meninggalkan sebuah Title nodeTitle
VisitOutlineStart(outline)Memasuki sebuah Outline nodeOutline
VisitOutlineEnd(outline)Meninggalkan sebuah Outline nodeOutline
VisitOutlineElementStart(outline_element)Memasuki sebuah OutlineElement nodeOutlineElement
VisitOutlineElementEnd(outline_element)Meninggalkan sebuah OutlineElement nodeOutlineElement
VisitRichTextStart(rich_text)Memasuki sebuah RichText nodeRichText
VisitRichTextEnd(rich_text)Meninggalkan sebuah RichText nodeRichText
VisitImageStart(image)Memasuki sebuah Image nodeImage
VisitImageEnd(image)Meninggalkan sebuah Image nodeImage

Semua metode memiliki tanda tangan:

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

Urutan Penelusuran

Accept menyebarkan dalam penelusuran depth-first, pre-order:

  1. VisitDocumentStart dipanggil saat memasuki dokumen.
  2. Setiap anak Page dikunjungi secara rekursif (PageStart → children → PageEnd).
  3. Di dalam sebuah Page: TitleStart/End, kemudian setiap Outline (OutlineStart → OutlineElements → OutlineEnd).
  4. Di dalam sebuah OutlineElement: OutlineElementStart, kemudian anak-anak (RichText, Image, elemen bersarang), kemudian OutlineElementEnd.
  5. VisitDocumentEnd dipanggil setelah semua halaman telah dikunjungi.

Contoh Penggunaan

Kumpulkan semua judul halaman

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)

Hitung node berdasarkan tipe

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

Ekstrak semua gambar melalui visitor

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

Buat laporan outline dokumen

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

Kunjungi dari sub-node

Accept dapat dipanggil pada node mana pun, tidak hanya dokumen root:

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

Tipe Node yang Didukung

Pengunjung saat ini menangani tipe node berikut: Document, Page, Title, Outline, OutlineElement, RichText, Image. Tidak ada metode kunjungan untuk Table, TableRow, TableCell, AttachedFile, atau NumberList — node-node tersebut dicapai melalui GetChildNodes traversal sebagai gantinya.


Lihat Juga

  • Dokumen: node akar; panggil doc.Accept(visitor) untuk memulai traversal penuh
  • Halaman: VisitPageStart / VisitPageEnd
  • Garis Besar: VisitOutlineStart / VisitOutlineEnd
  • RichText: VisitRichTextStart / VisitRichTextEnd
  • Gambar: VisitImageStart / VisitImageEnd
 Bahasa Indonesia