DocumentVisitor

DocumentVisitor — Aspose.Note FOSS for Python API Reference

Kelas: DocumentVisitor

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

DocumentVisitor adalah kelas asas abstrak untuk penjelajahan pola pelawat bagi pokok dokumen OneNote. Subkelaskan ia dan gantikan hanya kaedah lawatan yang anda perlukan. Panggil node.Accept(visitor) untuk memulakan penjelajahan dari mana-mana nod; panggil doc.Accept(visitor) untuk menelusuri keseluruhan dokumen.

Semua kaedah dalam kelas asas tidak melakukan apa-apa (kembali None). Gantikan hanya yang relevan dengan kes penggunaan anda.


Kaedah Lawatan

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

Semua kaedah mempunyai tandatangan:

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

Urutan Penelusuran

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

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

Contoh Penggunaan

Kumpulkan semua tajuk 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)

Kira nod mengikut jenis

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 imej melalui pelawat

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

Bina laporan rangka 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))

Lawati dari sub-nod

Accept boleh dipanggil pada mana-mana nod, bukan hanya dokumen akar:

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

Jenis Nod yang Disokong

Pengunjung kini memanggil untuk jenis nod berikut: Document, Page, Title, Outline, OutlineElement, RichText, Image. Tiada kaedah lawatan untuk Table, TableRow, TableCell, AttachedFile, atau NumberList — nod‑nod tersebut dicapai melalui GetChildNodes penelusuran sebagai gantinya.


Lihat Juga

  • Dokumen: nod akar; panggil doc.Accept(visitor) untuk memulakan penelusuran penuh
  • Halaman: VisitPageStart / VisitPageEnd
  • Garis Besar: VisitOutlineStart / VisitOutlineEnd
  • RichText: VisitRichTextStart / VisitRichTextEnd
  • Imej: VisitImageStart / VisitImageEnd
 Bahasa Melayu