DocumentVisitor

DocumentVisitor — Aspose.Note FOSS for Python API Reference

클래스: DocumentVisitor

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

DocumentVisitor 은 OneNote 문서 트리의 방문자 패턴 탐색을 위한 추상 기본 클래스입니다. 이를 서브클래스화하고 필요한 visit 메서드만 오버라이드하십시오. Call node.Accept(visitor) 어떤 노드에서든 탐색을 시작하려면; call doc.Accept(visitor) 전체 문서를 탐색하려면.

기본 클래스의 모든 메서드는 no-ops (return 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 노드Title
VisitOutlineStart(outline)들어가는 Outline 노드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 깊이 우선, 전위 순회에서 디스패치합니다:

  1. VisitDocumentStart 문서에 들어갈 때 호출됩니다.
  2. 각 자식 Page 재귀적으로 방문됩니다 (PageStart → children → PageEnd).
  3. 내부에 Page: TitleStart/End, 그 다음 각 Outline (OutlineStart → OutlineElements → OutlineEnd).
  4. 내부에 OutlineElement: OutlineElementStart, 그 다음 자식 (RichText, Image, 중첩 요소), 그 다음 OutlineElementEnd.
  5. 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
 한국어