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
└── AttachedFileJeder 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:
| Eigenschaft | Typ | Beschreibung |
|---|---|---|
Title | `Title | None` |
Author | `str | None` |
CreationTime | `datetime | None` |
LastModifiedTime | `datetime | None` |
Level | `int | None` |
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
| Bereich | Status |
|---|---|
Lesen .one Dateien | Voll unterstützt |
| PDF-Export (via ReportLab) | Unterstützt |
Zurückschreiben nach .one | Nicht implementiert |
| Verschlüsselte Dokumente | Nicht unterstützt (raises IncorrectPasswordException) |
| HTML / Bild / ONE-Speicherformate | Deklariert für API-Kompatibilität; auslösen UnsupportedSaveFormatException |
Verfügbare Anleitungen
- Übersicht der Funktionen: vollständige Funktionsliste mit Nachweis
- Erste Schritte: Voraussetzungen, Installation und erste Schritte
- Installation: pip install und optionale Abhängigkeiten