Funktionsübersicht — Aspose.Note FOSS für Python
Aspose.Note FOSS for Python (package aspose-note, version 26.3.1) stellt eine Python API zum Lesen von Microsoft OneNote .one Abschnittsdateien und deren Export nach PDF. Alle unten aufgeführten Funktionen wurden gegen den Quellcode des Repositorys, die README und Beispielskripte verifiziert.
Installation und Einrichtung
Installation von PyPI:
pip install aspose-noteFür PDF-Exportunterstützung (erfordert ReportLab):
pip install "aspose-note[pdf]"Voraussetzungen: Python 3.10 oder höher. Keine Microsoft Office-Installation erforderlich.
Funktionen und Fähigkeiten
.one-Datei Laden
Laden Sie Microsoft OneNote Abschnittsdateien von einem Dateipfad oder einem beliebigen Binärstrom (Dateihandhabung, io.BytesIO, HTTP-Antwortkörper, Cloud‑Speicher‑Stream).
Document.FileFormatliefert eine best‑effort Angabe der OneNote-Dateiformatversion (OneNote2010, OneNoteOnline oder OneNote2007)- Stream‑basiertes Laden eliminiert Festplatten‑I/O für In‑Memory‑ oder Netzwerk‑Workflows.
LoadOptions.LoadHistoryFlag steuert, ob die Seitenhistorie im DOM enthalten ist
from aspose.note import Document
##From a file path
doc = Document("notebook.one")
##From a binary stream
with open("notebook.one", "rb") as f:
doc = Document(f)Durchlauf des Dokument‑DOM
Das vollständige OneNote-Dokument wird als Baum von typisierten Python-Objekten bereitgestellt. Jeder Knoten erbt von Node oder CompositeNode:
Document: Wurzel; stellt bereitDisplayName,CreationTime,FileFormatPage: direktes Kind vonDocument; stellt bereitTitle,Author,CreationTime,LastModifiedTime,LevelTitle: exponiertTitleText,TitleDate,TitleTime(alleRichTextKnoten)Outline: positionsbasierter Container mitHorizontalOffset,VerticalOffset,MaxWidth,MaxHeight,MinWidth,ReservedWidth,IndentPositionOutlineElement: Blatt-Container; exponiertNumberList
Navigationsmethoden für CompositeNode:
| Methode / Eigenschaft | Beschreibung |
|---|---|
FirstChild, LastChild | Direkter Kindzugriff |
GetChildNodes(Type) | Rekursive, typgefilterte Suche |
AppendChildLast(node) | Kind am Ende hinzufügen |
AppendChildFirst(node) | Kind am Anfang hinzufügen |
InsertChild(index, node) | An Position einfügen |
RemoveChild(node) | Kind entfernen |
for child in node | Direkte Kinder iterieren |
from aspose.note import Document, Page, Outline, OutlineElement, RichText
doc = Document("notebook.one")
for page in doc.GetChildNodes(Page):
title_text = page.Title.TitleText.Text if page.Title and page.Title.TitleText else ""
print(f"Page: {title_text}")
for outline in page.GetChildNodes(Outline):
for oe in outline.GetChildNodes(OutlineElement):
for rt in oe.GetChildNodes(RichText):
print(f" {rt.Text}")Rich-Text-Inhaltsextraktion
RichText Knoten stellen bereit:
Text: str: vollständiger Klartext-StringTextRuns: list[TextRun]: Liste formatierter SegmenteTags: list[NoteTag]: OneNote-Tags, die an diesem Block angehängt sindAppend(text, style=None): Textlauf im Speicher anhängenReplace(old_value, new_value): String-Ersetzung im Speicher
Jeder TextRun trägt:
| Eigenschaft | Typ | Beschreibung |
|---|---|---|
Text | str | Segmenttext |
Style | TextStyle | Formatierungsmetadaten |
TextStyle Eigenschaften:
| Eigenschaft | Typ |
|---|---|
IsBold, IsItalic, IsUnderline, IsStrikethrough | bool |
IsSuperscript, IsSubscript | bool |
FontName | `str |
FontSize | `float |
FontColor, Highlight | `int |
Language | `int |
IsHyperlink | bool |
HyperlinkAddress | `str |
from aspose.note import Document, RichText
doc = Document("notebook.one")
for rt in doc.GetChildNodes(RichText):
for run in rt.TextRuns:
if run.Style.IsHyperlink:
print(f"Hyperlink: {run.Text} -> {run.Style.HyperlinkAddress}")
if run.Style.IsBold:
print(f"Bold text: {run.Text}")Bilderextraktion
Image Knoten geben rohe Bytes und Metadaten für jedes eingebettete Bild aus:
| Eigenschaft | Typ | Beschreibung |
|---|---|---|
FileName | `str | None` |
Bytes | bytes | Rohbilddaten |
Width, Height | `float | None` |
AlternativeTextTitle | `str | None` |
AlternativeTextDescription | `str | None` |
HyperlinkUrl | `str | None` |
Tags | list[NoteTag] | Angehängte OneNote-Tags |
from aspose.note import Document, Image
doc = Document("notebook.one")
for i, img in enumerate(doc.GetChildNodes(Image), start=1):
filename = img.FileName or f"image_{i}.bin"
with open(filename, "wb") as f:
f.write(img.Bytes)
print(f"Saved: {filename} ({img.Width} x {img.Height} pts)")Extraktion angehängter Dateien
AttachedFile Knoten stellen eingebettete Dateianhänge bereit:
| Eigenschaft | Typ | Beschreibung |
|---|---|---|
FileName | `str | None` |
Bytes | bytes | Rohdateidaten |
Tags | list[NoteTag] | Angehängte OneNote-Tags |
from aspose.note import Document, AttachedFile
doc = Document("notebook.one")
for i, af in enumerate(doc.GetChildNodes(AttachedFile), start=1):
filename = af.FileName or f"attachment_{i}.bin"
with open(filename, "wb") as f:
f.write(af.Bytes)Tabellenparsing
Table, TableRow, und TableCell die vollständige Tabellenstruktur offenlegen:
| Klasse | Schlüsseleigenschaften |
|---|---|
Table | Columns: list[TableColumn] (jede TableColumn hat .Width und .LockedWidth), IsBordersVisible: bool, Tags: list[NoteTag] |
TableRow | Zellen iterieren über GetChildNodes(TableCell) |
TableCell | Enthält RichText, Image, und andere Inhaltsknoten |
from aspose.note import Document, Table, TableRow, TableCell, RichText
doc = Document("notebook.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)
values = [
" ".join(rt.Text for rt in cell.GetChildNodes(RichText)).strip()
for cell in cells
]
print(f"Row {r}:", values)OneNote-Tag-Inspektion
NoteTag erscheint auf RichText, Image, AttachedFile, und Table Knoten über ihre .Tags Eigenschaft. OutlineElement hat keine .Tags Eigenschaft. NoteTag Eigenschaften:
| Eigenschaft | Typ | Beschreibung |
|---|---|---|
Icon | `int | None` |
Label | `str | None` |
FontColor | `int | None` |
Highlight | `int | None` |
CreationTime | `datetime | None` |
CompletedTime | `datetime | None` |
Fabrikmethode: NoteTag.CreateYellowStar() erstellt einen Standard‑Gelb‑Stern‑Tag‑Knoten.
from aspose.note import Document, RichText
doc = Document("notebook.one")
for rt in doc.GetChildNodes(RichText):
for tag in rt.Tags:
print(f"Tag: {tag.Label} (icon={tag.Icon}, completed={tag.CompletedTime})")Unterstützung für nummerierte Listen
OutlineElement.NumberList stellt bereit:
| Eigenschaft | Typ | Beschreibung |
|---|---|---|
Format | `str | None` |
Restart | `int | None` |
from aspose.note import Document, OutlineElement
doc = Document("notebook.one")
for oe in doc.GetChildNodes(OutlineElement):
nl = oe.NumberList
if nl:
print(f"format={nl.Format!r}")DocumentVisitor‑Durchlauf
DocumentVisitor bietet ein Visitor-Muster für die strukturierte Durchquerung des gesamten Dokuments. Überschreiben Sie beliebige VisitXxxStart / VisitXxxEnd Methode, um bestimmte Knotentypen abzufangen:
VisitDocumentStart(doc)/VisitDocumentEnd(doc)VisitPageStart(page)/VisitPageEnd(page)VisitTitleStart(title)/VisitTitleEnd(title)VisitOutlineStart(outline)/VisitOutlineEnd(outline)VisitOutlineElementStart(oe)/VisitOutlineElementEnd(oe)VisitRichTextStart(rt)/VisitRichTextEnd(rt)VisitImageStart(img)/VisitImageEnd(img)
from aspose.note import Document, DocumentVisitor, Page, RichText, Image
class MySummaryVisitor(DocumentVisitor):
def __init__(self):
self.pages, self.texts, self.images = 0, 0, 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("notebook.one")
v = MySummaryVisitor()
doc.Accept(v)
print(f"Pages={v.pages} RichText={v.texts} Images={v.images}")PDF-Export
Speichern Sie ein geladenes Dokument als PDF mit Document.Save(). Unterstützt über das optionale ReportLab-Backend.
from aspose.note import Document, SaveFormat
doc = Document("notebook.one")
doc.Save("output.pdf", SaveFormat.Pdf)PdfSaveOptions
| Option | Typ | Beschreibung |
|---|---|---|
PageIndex | int | Feld existiert; nicht an den PDF-Exporter in v26.3.1 weitergeleitet (hat keine Auswirkung) |
PageCount | `int | None` |
ImageCompression | `Any | None` |
JpegQuality | `int | None` |
PageSettings | `Any | None` |
PageSplittingAlgorithm | `Any | None` |
import io
from aspose.note import Document, SaveFormat
from aspose.note.saving import PdfSaveOptions
doc = Document("notebook.one")
##Save to file
doc.Save("output.pdf", SaveFormat.Pdf)
##Save to in-memory stream
buf = io.BytesIO()
doc.Save(buf, PdfSaveOptions())
pdf_bytes = buf.getvalue()Format‑ und Enum‑Referenz
SaveFormat
| Wert | Status |
|---|---|
SaveFormat.Pdf | Implementiert (erfordert ReportLab) |
FileFormat
Document.FileFormat gibt einen best‑effort Hinweis auf die OneNote-Dateiformatversion. Das Enum deklariert drei Werte:
| Wert | Beschreibung |
|---|---|
FileFormat.OneNote2010 | OneNote‑2010‑Format |
FileFormat.OneNoteOnline | OneNote‑Online‑Format |
FileFormat.OneNote2007 | OneNote‑2007‑Format |
NodeType
NodeType.Document, NodeType.Page, NodeType.Outline, NodeType.OutlineElement, NodeType.RichText, NodeType.Image, NodeType.Table, NodeType.AttachedFile
HorizontalAlignment
HorizontalAlignment.Left, HorizontalAlignment.Center, HorizontalAlignment.Right
Aktuelle Einschränkungen
| Einschränkung | Detail |
|---|---|
| Nur lesbar | Zurückschreiben nach .one Format ist nicht implementiert |
| Keine Verschlüsselung | Verschlüsselte Dokumente lösen aus IncorrectPasswordException |
| PDF nur zum Export | Andere SaveFormat Werte lösen aus UnsupportedSaveFormatException |
| ReportLab für PDF erforderlich | Installieren pip install "aspose-note[pdf]" separat |
GetPageHistory gibt eine Ein-Element-Liste zurück | Die vollständige Durchquerung der Seitenhistorie ist ein Stub; gibt zurück [page] |
DetectLayoutChanges() | Kompatibilitäts-Stub; keine Operation |
Tipps und bewährte Verfahren
- Auf None prüfen:
Page.Title,Title.TitleText,OutlineElement.NumberList, und die meisten Metadatenfelder könnenNone. Immer mitif x is not Noneoderif xbevor Sie auf Eigenschaften zugreifen. - Verwenden
GetChildNodes(Type)für rekursive Suche statt das Durchlaufen des Baums von Hand. Es durchsucht den gesamten Unterbaum. - Direkte Kinder iterieren mit
for child in nodewenn Sie nur unmittelbare Kinder benötigen. - Kodierung unter Windows behandeln: Unter Windows,
sys.stdoutkann eine veraltete Codepage verwenden. Fügen Siesys.stdout.reconfigure(encoding="utf-8", errors="replace")beim Start, wenn Unicode-Text ausgegeben wird. - Installieren
[pdf]zusätzlich: Nicht importierenSaveFormat.PdfFunktionalität, ohne sie zuerst zu installierenpip install "aspose-note[pdf]". Ohne ReportLab wird das Speichern als PDF zur Laufzeit einen Importfehler auslösen.