Udviklerguide

Aspose.Note FOSS for Python is a free, open-source library for reading Microsoft OneNote .one sektionfiler uden nogen afhængighed af Microsoft Office. Den leverer et rent offentligt API under den aspose.note pakke, modelleret efter Aspose.Note for .NET grænsefladen. Biblioteket er egnet til dokumentautomatisering, indholdsindeksering, dataudtræknings‑pipelines og arkiveringsarbejdsgange.

Denne udviklerguide dækker hele det offentlige API‑område, der er tilgængeligt i version 26.3.1, med kørbare kodeeksempler for hver større funktion.

Indlæsning af dokument

Indlæs en .one fil fra en filsti eller en binær strøm. Den Document klasse er indgangspunktet for alle operationer.

Indlæs fra en filsti

from aspose.note import Document

doc = Document("MyNotes.one")

Indlæs fra en binær strøm

Nyttigt ved læsning fra cloud‑lagring, HTTP‑respons eller hukommelses‑buffere:

from pathlib import Path
from aspose.note import Document

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

Indlæsningsindstillinger

Brug LoadOptions til at angive valgfrie parametre ved indlæsning:

from aspose.note import Document, LoadOptions

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

Bemærk: DocumentPassword findes på LoadOptions for API-kompatibilitet, men krypterede dokumenter understøttes ikke. Forsøg på at indlæse en krypteret fil udløser IncorrectPasswordException.


Dokumentstruktur (DOM)

OneNote-dokumentmodellen er et træ:

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

Hver node eksponerer ParentNode og en Document egenskab, der bevæger sig op til roden. Sammensatte noder understøtter iteration af børn, FirstChild, LastChild, AppendChildLast, InsertChild, RemoveChild, og GetChildNodes(Type).


Iteration af sider

Sider er de direkte børn af Document. Iterer dem direkte eller brug 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}]")

Side‑metadata:

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

Tekstudtrækning

Udtræk al ren 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))

Undersøg formateringsløb

Hver RichText indeholder en liste over TextRun segmenter. Hver kørsel har sin egen 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)}]")

Udtræk hyperlinks

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)

Billedudtrækning

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

Billedegenskaber: FileName, Bytes, Width, Height, AlternativeTextTitle, AlternativeTextDescription, HyperlinkUrl, Tags.


Tabelparsing

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)

Vedhæftede filer

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

Tags og nummererede lister

Undersøg NoteTag-elementer

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

Undersøg nummererede lister

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-mønster

Brug DocumentVisitor til at implementere en besøger, der gennemgår hele dokumenttræet:

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

PDF-eksport kræver den valgfrie ReportLab-afhængighed. Installer den med:

pip install "aspose-note[pdf]"

Grundlæggende PDF-eksport

from aspose.note import Document, SaveFormat

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

PDF-eksport med indstillinger

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

Bemærk: PdfSaveOptions.PageIndex og PageCount felter findes, men videresendes ikke til PDF-eksportøren i v26.3.1. Hele dokumentet eksporteres altid.


Aktuelle begrænsninger

OmrådeStatus
Læsning .one filerFuldt understøttet
PDF-eksport (via ReportLab)Understøttet
Skriver tilbage til .oneIkke implementeret
Krypterede dokumenterUnderstøttes ikke (kaster IncorrectPasswordException)
HTML / billede / ONE-gemmeformaterDeklareret for API-kompatibilitet; kaster UnsupportedSaveFormatException

Tilgængelige vejledninger


Se også

 Dansk