Vodič za programere

Aspose.Note FOSS for Python is a free, open-source library for reading Microsoft OneNote .one sekcioni fajlovi bez ikakve zavisnosti od Microsoft Office-a. Pruža čist javni API pod aspose.note paket, modeliran po Aspose.Note za .NET interfejsu. Biblioteka je pogodna za automatizaciju dokumenata, indeksiranje sadržaja, pipeline‑ove za ekstrakciju podataka i arhivske radne tokove.

Ovaj vodič za programere pokriva kompletnu javnu API površinu dostupnu u verziji 26.3.1, sa izvršnim primerima koda za svaku glavnu funkcionalnost.

Učitavanje dokumenta

Učitaj .one fajl sa putanje fajla ili binarnog toka. The Document klasa je ulazna tačka za sve operacije.

Učitaj sa putanje do fajla

from aspose.note import Document

doc = Document("MyNotes.one")

Učitaj iz binarnog toka

Korisno pri čitanju iz cloud skladišta, HTTP odgovora ili memorijskih bafera:

from pathlib import Path
from aspose.note import Document

with Path("MyNotes.one").open("rb") as f:
    doc = Document(f)

Opcije učitavanja

Koristi LoadOptions za postavljanje opcionih parametara prilikom učitavanja:

from aspose.note import Document, LoadOptions

opts = LoadOptions()
opts.LoadHistory = True   # Include page history in the DOM
doc = Document("MyNotes.one", opts)

Napomena: DocumentPassword postoji na LoadOptions za kompatibilnost API‑ja, ali šifrovani dokumenti nisu podržani. Pokušaj učitavanja šifrovanog fajla izaziva IncorrectPasswordException.


Struktura dokumenta (DOM)

Model OneNote dokumenta je stablo:

Document
  └── Page (0..n)
        ├── Title
        │     ├── TitleText (RichText)
        │     ├── TitleDate (RichText)
        │     └── TitleTime (RichText)
        └── Outline (0..n)
              └── OutlineElement (0..n)
                    ├── RichText
                    ├── Image
                    ├── Table
                    │     └── TableRow
                    │           └── TableCell
                    │                 └── RichText / Image
                    └── AttachedFile

Svaki čvor izlaže ParentNode i Document svojstvo koje se penje do korena. Složeni čvorovi podržavaju iteraciju dece, FirstChild, LastChild, AppendChildLast, InsertChild, RemoveChild, i GetChildNodes(Type).


Iteriranje stranica

Stranice su direktna deca od Document. Iterirajte ih direktno ili koristite GetChildNodes:

from aspose.note import Document, Page

doc = Document("MyNotes.one")

for page in doc:
    title = page.Title.TitleText.Text if page.Title and page.Title.TitleText else "(untitled)"
    author = page.Author or "(unknown)"
    print(f"  {title}  [by {author}]")

Metapodaci stranice:

SvojstvoTipOpis
Title`TitleNone`
Author`strNone`
CreationTime`datetimeNone`
LastModifiedTime`datetimeNone`
Level`intNone`

Ekstrakcija teksta

Ekstrahujte sav običan tekst

from aspose.note import Document, RichText

doc = Document("MyNotes.one")
all_text = [rt.Text for rt in doc.GetChildNodes(RichText) if rt.Text]
print("\n".join(all_text))

Pregledajte sekvence formatiranja

Svaki RichText sadrži listu TextRun segmenta. Svako pokretanje nosi svoje TextStyle:

from aspose.note import Document, RichText

doc = Document("FormattedNotes.one")
for rt in doc.GetChildNodes(RichText):
    for run in rt.TextRuns:
        style = run.Style
        flags = []
        if style.IsBold: flags.append("bold")
        if style.IsItalic: flags.append("italic")
        if style.IsHyperlink: flags.append(f"link={style.HyperlinkAddress}")
        print(f"{run.Text!r:40s} [{', '.join(flags)}]")

Ekstrahujte hiperveze

from aspose.note import Document, RichText

doc = Document("MyNotes.one")
for rt in doc.GetChildNodes(RichText):
    for run in rt.TextRuns:
        if run.Style.IsHyperlink and run.Style.HyperlinkAddress:
            print(run.Text, "->", run.Style.HyperlinkAddress)

Ekstrakcija slika

from aspose.note import Document, Image

doc = Document("MyNotes.one")
for i, img in enumerate(doc.GetChildNodes(Image), start=1):
    name = img.FileName or f"image_{i}.bin"
    with open(name, "wb") as f:
        f.write(img.Bytes)
    print(f"Saved {name}  ({img.Width}x{img.Height})")

Svojstva slike: FileName, Bytes, Width, Height, AlternativeTextTitle, AlternativeTextDescription, HyperlinkUrl, Tags.


Parsiranje tabela

from aspose.note import Document, Table, TableRow, TableCell, RichText

doc = Document("MyNotes.one")
for table in doc.GetChildNodes(Table):
    print("Column widths:", [col.Width for col in table.Columns])
    for r, row in enumerate(table.GetChildNodes(TableRow), start=1):
        cells = row.GetChildNodes(TableCell)
        row_text = [
            " ".join(rt.Text for rt in cell.GetChildNodes(RichText)).strip()
            for cell in cells
        ]
        print(f"Row {r}:", row_text)

Priložene datoteke

from aspose.note import Document, AttachedFile

doc = Document("NotesWithAttachments.one")
for i, af in enumerate(doc.GetChildNodes(AttachedFile), start=1):
    name = af.FileName or f"attachment_{i}.bin"
    with open(name, "wb") as f:
        f.write(af.Bytes)
    print(f"Saved: {name}")

Oznake i numerisane liste

Pregledajte stavke NoteTag

from aspose.note import Document, RichText, Image, Table

doc = Document("TaggedNotes.one")
for rt in doc.GetChildNodes(RichText):
    for tag in rt.Tags:
        print(f"RichText tag: {tag.Label} icon={tag.Icon}")
for img in doc.GetChildNodes(Image):
    for tag in img.Tags:
        print(f"Image tag: {tag.Label}")

Pregledajte numerisane liste

from aspose.note import Document, OutlineElement

doc = Document("NumberedNotes.one")
for oe in doc.GetChildNodes(OutlineElement):
    nl = oe.NumberList
    if nl:
        print(f"format={nl.Format!r}")

Obrazac DocumentVisitor

Koristite DocumentVisitor za implementaciju posetioca koji prolazi kroz celo stablo dokumenta:

from aspose.note import Document, DocumentVisitor, Page, RichText, Image

class ContentCounter(DocumentVisitor):
    def __init__(self):
        self.pages = 0
        self.texts = 0
        self.images = 0

    def VisitPageStart(self, page: Page) -> None:
        self.pages += 1

    def VisitRichTextStart(self, rt: RichText) -> None:
        self.texts += 1

    def VisitImageStart(self, img: Image) -> None:
        self.images += 1

doc = Document("MyNotes.one")
counter = ContentCounter()
doc.Accept(counter)
print(f"Pages: {counter.pages}, Texts: {counter.texts}, Images: {counter.images}")

PDF izvoz

PDF izvoz zahteva opcionalnu zavisnost ReportLab. Instalirajte je pomoću:

pip install "aspose-note[pdf]"

Osnovni PDF izvoz

from aspose.note import Document, SaveFormat

doc = Document("MyNotes.one")
doc.Save("output.pdf", SaveFormat.Pdf)

PDF izvoz sa opcijama

import io
from aspose.note import Document, SaveFormat
from aspose.note.saving import PdfSaveOptions

doc = Document("MyNotes.one")

##With save options
opts = PdfSaveOptions()
doc.Save("output.pdf", opts)

##Save to in-memory stream
buf = io.BytesIO()
doc.Save(buf, PdfSaveOptions())
pdf_bytes = buf.getvalue()

Napomena: PdfSaveOptions.PageIndex i PageCount Polja postoje, ali se ne prosleđuju PDF izvozniku u v26.3.1. Celokupan dokument se uvek izveze.


Trenutna ograničenja

OblastStatus
Čitanje .one fajloviPotpuno podržano
PDF izvoz (preko ReportLab)Podržano
Pisanje nazad u .oneNije implementirano
Šifrovani dokumentiNije podržano (izaziva IncorrectPasswordException)
HTML / slika / ONE formati za čuvanjeDeklarisano radi API kompatibilnosti; baci UnsupportedSaveFormatException

Dostupni vodiči


Vidi takođe

 Српски