DocumentVisitor

DocumentVisitor — Aspose.Note FOSS for Python API Reference

Klase: DocumentVisitor

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

DocumentVisitor ir abstraktā pamata klase apmeklētāja modeļa pārlūkošanai OneNote dokumenta koka struktūrā. Izveidojiet apakšklasi un pārrakstiet tikai tās apmeklējuma metodes, kuras jums vajag. Izsauciet node.Accept(visitor) lai sāktu pārlūkošanu no jebkura mezgla; izsauciet doc.Accept(visitor) lai pārlūkotu visu dokumentu.

Visas metodes pamata klasē ir neizpildes (atgriež None). Pārrakstiet tikai tās, kas ir būtiskas jūsu lietošanas gadījumam.


Apmeklējuma metodes

MethodIzsaukts, kadParametra tips
VisitDocumentStart(document)Ienākot Document mezglsDocument
VisitDocumentEnd(document)Iziet Document mezglsDocument
VisitPageStart(page)Ienākot Page mezglsPage
VisitPageEnd(page)Iziet Page mezglsPage
VisitTitleStart(title)Ienākot Title mezglsTitle
VisitTitleEnd(title)Atstājot a Title nodeTitle
VisitOutlineStart(outline)Ievadot an Outline nodeOutline
VisitOutlineEnd(outline)Aiziet Outline mezglsOutline
VisitOutlineElementStart(outline_element)Ienākot OutlineElement mezglsOutlineElement
VisitOutlineElementEnd(outline_element)Iziet OutlineElement mezglsOutlineElement
VisitRichTextStart(rich_text)Ievadot RichText nodeRichText
VisitRichTextEnd(rich_text)Pamest a RichText nodeRichText
VisitImageStart(image)Ievadot an Image nodeImage
VisitImageEnd(image)Atstājot Image nodeImage

Visām metodēm ir šī paraksts:

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

Pārlūkošanas secība

Accept izsauc dziļuma pirmā, priekšpēdas pārlūkošanā:

  1. VisitDocumentStart tiek izsaukts, ieejot dokumentā.
  2. Katrs bērns Page tiek apmeklēts rekursīvi (PageStart → children → PageEnd).
  3. Iekš Page: TitleStart/End, tad katrs Outline (OutlineStart → OutlineElements → OutlineEnd).
  4. Iekšā OutlineElement: OutlineElementStart, tad bērni (RichText, Image, iegultie elementi), tad OutlineElementEnd.
  5. VisitDocumentEnd tiek izsaukts pēc tam, kad visas lapas ir apmeklētas.

Lietošanas piemēri

Savāciet visas lapu virsrakstus

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)

Skaitīt mezglus pēc tipa

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

Izgūt visus attēlus, izmantojot 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)")

Izveidot dokumenta struktūras pārskatu

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

Apmeklēt no apakšmezgla

Accept var tikt izsaukts uz jebkura mezgla, ne tikai uz saknes dokumenta:

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

Atbalstītie mezglu tipi

Apmeklētājs pašlaik izsauc šādus mezglu tipus: Document, Page, Title, Outline, OutlineElement, RichText, Image. Nav apmeklējuma metodes priekš Table, TableRow, TableCell, AttachedFile, vai NumberList — šie mezgli tiek sasniegti caur GetChildNodes pārlūkošana tā vietā.


Skatīt arī

  • Dokuments: saknes mezgls; izsaukums doc.Accept(visitor) lai uzsāktu pilnu pārlūkošanu
  • Lapa: VisitPageStart / VisitPageEnd
  • Pārskats: VisitOutlineStart / VisitOutlineEnd
  • RichText: VisitRichTextStart / VisitRichTextEnd
  • Attēls: VisitImageStart / VisitImageEnd
 Latviešu