DocumentVisitor

DocumentVisitor — Aspose.Note FOSS for Python API Reference

Lớp: DocumentVisitor

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

DocumentVisitor là lớp cơ sở trừu tượng cho việc duyệt theo mẫu visitor của cây tài liệu OneNote. Tạo lớp con và ghi đè chỉ các phương thức visit bạn cần. Gọi node.Accept(visitor) để bắt đầu duyệt từ bất kỳ nút nào; gọi doc.Accept(visitor) để duyệt toàn bộ tài liệu.

Tất cả các phương thức trong lớp cơ sở đều không thực hiện gì (trả về None). Ghi đè chỉ những phương thức liên quan đến trường hợp sử dụng của bạn.


Phương thức Visit

MethodĐược gọi khiKiểu tham số
VisitDocumentStart(document)Đang vào một Document nútDocument
VisitDocumentEnd(document)Rời một Document nútDocument
VisitPageStart(page)Đang vào một Page nútPage
VisitPageEnd(page)Rời một Page nútPage
VisitTitleStart(title)Đang vào một Title nútTitle
VisitTitleEnd(title)Rời một Title nútTitle
VisitOutlineStart(outline)Đang vào một Outline nútOutline
VisitOutlineEnd(outline)Rời một Outline nútOutline
VisitOutlineElementStart(outline_element)Đang vào một OutlineElement nodeOutlineElement
VisitOutlineElementEnd(outline_element)Rời một OutlineElement nodeOutlineElement
VisitRichTextStart(rich_text)Vào một RichText nodeRichText
VisitRichTextEnd(rich_text)Rời khỏi một RichText nodeRichText
VisitImageStart(image)Đang vào một Image nodeImage
VisitImageEnd(image)Rời khỏi một Image nútImage

Tất cả các phương thức có chữ ký:

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

Thứ tự duyệt

Accept phân phối trong một duyệt sâu đầu tiên, theo thứ tự trước:

  1. VisitDocumentStart được gọi khi vào tài liệu.
  2. Mỗi nút con Page được thăm một cách đệ quy (PageStart → children → PageEnd).
  3. Trong một Page: TitleStart/End, sau đó mỗi Outline (OutlineStart → OutlineElements → OutlineEnd).
  4. Trong một OutlineElement: OutlineElementStart, sau đó các phần tử con (RichText, Image, các phần tử lồng nhau), sau đó OutlineElementEnd.
  5. VisitDocumentEnd được gọi sau khi tất cả các trang đã được truy cập.

Ví dụ sử dụng

Thu thập tất cả tiêu đề trang

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)

Đếm các nút theo loại

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

Trích xuất tất cả hình ảnh qua 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)")

Xây dựng báo cáo đề cương tài liệu

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

Thăm từ một nút con

Accept có thể được gọi trên bất kỳ nút nào, không chỉ tài liệu gốc:

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

Các loại nút được hỗ trợ

Trình duyệt hiện đang phân phối cho các loại nút sau: Document, Page, Title, Outline, OutlineElement, RichText, Image. Không có phương thức visit cho Table, TableRow, TableCell, AttachedFile, hoặc NumberList — những nút đó được tiếp cận qua GetChildNodes duyệt thay thế.


Xem Thêm

  • Tài liệu: nút gốc; gọi doc.Accept(visitor) để bắt đầu duyệt toàn bộ
  • Trang: VisitPageStart / VisitPageEnd
  • Đề cương: VisitOutlineStart / VisitOutlineEnd
  • RichText: VisitRichTextStart / VisitRichTextEnd
  • Hình ảnh: VisitImageStart / VisitImageEnd
 Tiếng Việt