Vodič za programere

Aspose.Note FOSS for Python je besplatna, open‑source biblioteka za čitanje Microsoft OneNote .one sekcijskih datoteka bez ikakve ovisnosti o Microsoft Officeu. Pruža čist javni API pod aspose.note paketom, modeliran prema sučelju Aspose.Note za .NET. Biblioteka je prikladna za automatizaciju dokumenata, indeksiranje sadržaja, cjevovode za ekstrakciju podataka i arhivske radne tokove.

Ovaj priručnik za programere pokriva cijelu javnu API površinu dostupnu u verziji 26.3.1, s izvršnim kodnim primjerima za svaku glavnu značajku.

Učitavanje dokumenta

Učitaj .one datoteku iz putanje datoteke ili binarnog toka. Document klasa je ulazna točka za sve operacije.

Učitaj iz putanje datoteke

from aspose.note import Document

doc = Document("MyNotes.one")

Učitaj iz binarnog toka

Korisno pri čitanju iz cloud pohrane, HTTP odgovora ili memorijskih međuspremnika:

from pathlib import Path
from aspose.note import Document

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

Opcije učitavanja

Koristite LoadOptions za postavljanje opcionalnih parametara pri učitavanju:

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 radi API kompatibilnosti, ali šifrirani dokumenti nisu podržani. Pokušaj učitavanja šifrirane datoteke izaziva IncorrectPasswordException.


Struktura dokumenta (DOM)

Model dokumenta OneNote 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 korijena. Složeni čvorovi podržavaju iteraciju djece, FirstChild, LastChild, AppendChildLast, InsertChild, RemoveChild i GetChildNodes(Type).


Iteriranje stranica

Stranice su izravni potomci Document. Iterirajte ih izravno 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
TitleTitle | NoneBlok naslova stranice
Authorstr | NoneNiz autora
CreationTimedatetime | NoneVrijeme stvaranja stranice
LastModifiedTimedatetime | NoneVrijeme posljednje izmjene
Levelint | NoneRazina uvlačenja podstranice

Izdvajanje teksta

Izvuci sav čisti 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))

Pregled formatiranja

Svaki RichText sadrži popis TextRun segmenata. Svaki run nosi svoj 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)}]")

Ekstrahiraj 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 tablice

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 numerirani popisi

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

Pregledaj numerirane popise

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

DocumentVisitor uzorak

Koristite DocumentVisitor za implementaciju posjetitelja koji prolazi kroz cijelo 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 zahtijeva opcionalnu ReportLab ovisnost. Instalirajte ga 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 s 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 prosljeđuju PDF izvozniku u v26.3.1. Cijeli dokument se uvijek izvozi.


Trenutna ograničenja

PodručjeStatus
Čitanje .one datotekaPotpuno podržano
PDF izvoz (preko ReportLab)Podržano
Pisanje natrag u .oneNije implementirano
Šifrirani dokumentiNije podržano (baci IncorrectPasswordException)
HTML / slika / ONE formati spremanjaDeklarirano za API kompatibilnost; baci UnsupportedSaveFormatException

Dostupni vodiči


Vidi također

 Hrvatski