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 깊이 우선, 전위 순회에서 디스패치합니다:
VisitDocumentStart문서에 들어갈 때 호출됩니다.- 각 자식
Page재귀적으로 방문됩니다 (PageStart → children → PageEnd). - 내부에
Page:TitleStart/End, 그 다음 각Outline(OutlineStart → OutlineElements → OutlineEnd). - 내부에
OutlineElement:OutlineElementStart, 그 다음 자식 (RichText,Image, 중첩 요소), 그 다음OutlineElementEnd. 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 대신 순회를 통해.