Entwicklerhandbuch

Aspose.Note FOSS for Python is a free, open-source library for reading Microsoft OneNote .one Abschnittsdateien ohne jegliche Abhängigkeit von Microsoft Office. Sie bietet eine saubere öffentliche API unter dem aspose.note Paket, modelliert nach der Aspose.Note für .NET Schnittstelle. Die Bibliothek eignet sich für Dokumentenautomatisierung, Inhaltsindizierung, Datenextraktionspipelines und Archivierungs‑Workflows.

Dieses Entwicklerhandbuch deckt die vollständige öffentliche API-Oberfläche ab, die in Version 26.3.1 verfügbar ist, mit ausführbaren Codebeispielen für jedes Hauptfeature.

Dokumentenladen

Lade ein .one Datei von einem Dateipfad oder einem Binärstrom. Die Document Klasse ist der Einstiegspunkt für alle Vorgänge.

Laden von einem Dateipfad

from aspose.note import Document

doc = Document("MyNotes.one")

Laden von einem Binärstrom

Nützlich beim Lesen aus Cloud-Speicher, HTTP-Antworten oder In-Memory-Puffern:

from pathlib import Path
from aspose.note import Document

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

Ladeoptionen

Verwende LoadOptions um optionale Parameter zur Ladezeit festzulegen:

from aspose.note import Document, LoadOptions

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

Hinweis: DocumentPassword existiert auf LoadOptions für API‑Kompatibilität, aber verschlüsselte Dokumente werden nicht unterstützt. Der Versuch, eine verschlüsselte Datei zu laden, löst aus IncorrectPasswordException.


Dokumentenstruktur (DOM)

Das OneNote-Dokumentmodell ist ein Baum:

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

Jeder Knoten stellt bereit ParentNode und ein Document Eigenschaft, die bis zur Wurzel aufsteigt. Composite‑Knoten unterstützen die Kinditeration, FirstChild, LastChild, AppendChildLast, InsertChild, RemoveChild, und GetChildNodes(Type).


Durchlaufen von Seiten

Seiten sind die direkten Kinder von Document. Durchlaufen Sie sie direkt oder verwenden Sie 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}]")

Seiten-Metadaten:

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

Textextraktion

Alle Klartexte extrahieren

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

Formatierungsabschnitte untersuchen

Jeder RichText enthält eine Liste von TextRun Segmenten. Jeder Durchlauf trägt sein eigenes 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)}]")

Hyperlinks extrahieren

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)

Bilderextraktion

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

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


Tabellenparsing

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)

Angehängte Dateien

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 und nummerierte Listen

NoteTag-Elemente untersuchen

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

Nummerierte Listen untersuchen

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

Verwenden DocumentVisitor um einen Visitor zu implementieren, der den gesamten Dokumentbaum durchläuft:

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

PDF-Export erfordert die optionale ReportLab-Abhängigkeit. Installiere sie mit:

pip install "aspose-note[pdf]"

Grundlegender PDF-Export

from aspose.note import Document, SaveFormat

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

PDF-Export mit Optionen

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

Hinweis: PdfSaveOptions.PageIndex und PageCount Felder existieren, werden aber in v26.3.1 nicht an den PDF-Exporter weitergeleitet. Das gesamte Dokument wird immer exportiert.


Aktuelle Einschränkungen

BereichStatus
Lesen .one DateienVoll unterstützt
PDF-Export (via ReportLab)Unterstützt
Zurückschreiben nach .oneNicht implementiert
Verschlüsselte DokumenteNicht unterstützt (raises IncorrectPasswordException)
HTML / Bild / ONE-SpeicherformateDeklariert für API-Kompatibilität; auslösen UnsupportedSaveFormatException

Verfügbare Anleitungen


Siehe auch

 Deutsch