Funktionen Übersicht Aspose.Note FOSS für Python
Aspose.Note FOSS for Python (package aspose-note, Version 26.3.2) stellt eine Python-API für das Lesen von Microsoft OneNote bereit. .one Alle unten aufgeführten Funktionen werden mit dem Repository-Quellcode, README und Beispielscripts überprüft.
Installation und Einrichtung
Installieren von PyPI:
pip install aspose-noteFür die Unterstützung des Exports von PDF (erfordert ReportLab):
pip install aspose-noteAnforderungen: Python 3.10 oder neuer. Keine Microsoft Office-Installation erforderlich.
Merkmale und Fähigkeiten
.one Datei wird geladen
Microsoft OneNote-Abschnittdateien aus einem Dateipfad oder einem binären Stream (Dateihandhabung, io.BytesIO, HTTP-Antwortkörper, Cloud Speicherstrom).
Document.FileFormatbietet eine Best-effort-Angabe der Version des OneNote-Dateiformats (OneNo te2010, One No teOnline oder One note 2007),- Stream-basiertes Laden eliminiert Dateneingang/Ausgang für Arbeitsflüsse im Speicher oder im Netzwerk.
LoadOptions.LoadHistoryFlagge-Kontrollen, ob die Seitenverlaufserfassung 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)Dokument DOM-Übergang
Das gesamte OneNote-Dokument wird als Baum von eingetipften Python-Objekten angezeigt. Jeder Knoten erbt aus dem Node oder CompositeNode:
Document:Wurzel; zeigtDisplayName,CreationTime,FileFormatPage: unmittelbares Kind von:Document;, zeigt aufTitle,Author,CreationTime,LastModifiedTime,LevelTitle: zeigtTitleText,TitleDate,TitleTime(alleRichTextKnoten)Outline: Positionsbehälter mitHorizontalOffset,VerticalOffset,MaxWidth,MaxHeight,MinWidth,ReservedWidth,IndentPositionOutlineElement: Blätterbehälter; ExposureNumberList
Navigationsmethoden auf der CompositeNode:
| Methode / Eigenschaft | Beschreibung |
|---|---|
FirstChild, LastChild | Direkter Zugang für Kinder |
GetChildNodes(Type) | Recursive, typgefilterte Suche |
AppendChildLast(node) | Hinzufügen von Kind am Ende |
AppendChildFirst(node) | Kind am Anfang hinzufügen |
InsertChild(index, node) | Einfügen in Position |
RemoveChild(node) | Entfernen Sie ein Kind . |
for child in node | Iterative direkte Kinder |
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-Inhalt zu extrahieren
RichText Die Knoten stellen:
Text: str: Volltext-Streifen in einfacher FormTextRuns: list[TextRun]: Liste der formatierten SegmenteTags: list[NoteTag]: OneNote-Tags, die an diesen Block angebracht sindAppend(text, style=None): einen Text hinzufügen, der im Speicher ausgeführt wird.Replace(old_value, new_value): Ersatz von Zeichenketten im Speicher
Jeder von ihnen TextRun enthält:
| Immobilien und Vermögenswerte | Typ der | Beschreibung |
|---|---|---|
Text | str | Segmenttext |
Style | TextStyle | Metadatenformatierung |
TextStyle Eigenschaften:
| Immobilien und Vermögenswerte | Typ der |
|---|---|
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}")Bildentnahme
Image Knoten stellen Rohbyte und Metadaten für jedes eingebettete Bild zur Verfügung:
| Immobilien und Vermögenswerte | Typ der | Beschreibung |
|---|---|---|
FileName | `str | None` |
Bytes | bytes | Rohbilddaten |
Width, Height | `float | None` |
AlternativeTextTitle | `str | None` |
AlternativeTextDescription | `str | None` |
HyperlinkUrl | `str | None` |
Tags | list[NoteTag] | Beigefügte 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)")Beigefügte Datei-Extraktion
AttachedFile Knoten exponieren eingebettete Dateiauflagen:
| Immobilien und Vermögenswerte | Typ der | Beschreibung |
|---|---|---|
FileName | `str | None` |
Bytes | bytes | Rohdatei-Daten |
Tags | list[NoteTag] | Beigefügte 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)Tabellenanalyse
Table, TableRow,und . TableCell die gesamte Tabellenstruktur aufdecken:
| Klasse | Schlüsselmerkmale |
|---|---|
Table | Columns: list[TableColumn] (jeweils TableColumn hat .Width und .LockedWidth), IsBordersVisible: bool, Tags: list[NoteTag] |
TableRow | Iterationszellen ü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-Prüfung
NoteTag erscheint auf RichText, Image, AttachedFile, und Table die Nutzung von .Tags Eigentum. OutlineElement hat keine .Tags Eigentum. NoteTag Eigenschaften:
| Immobilien und Vermögenswerte | Typ der | Beschreibung |
|---|---|---|
Icon | `int | None` |
Label | `str | None` |
FontColor | `int | None` |
Highlight | `int | None` |
CreationTime | `datetime | None` |
CompletedTime | `datetime | None` |
Fabrikverfahren: NoteTag.CreateYellowStar() Erstellt einen Standard-Gelbsterntag.
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})")Nummerisierte Listeunterstützung
OutlineElement.NumberList die folgenden Angaben ausstellt:
| Immobilien und Vermögenswerte | Typ der | 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}")DokumentBesucherübergang
DocumentVisitor bietet ein Besuchermuster für die strukturierte Durchsuchung des gesamten Dokuments. Überschreiten Sie alle VisitXxxStart / VisitXxxEnd Methode zur Abfangen bestimmter Knotenarten:
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 zu erstellen
Speichern Sie ein geladenes Dokument in PDF mit: Document.Save().- Unterstützung über das optionale ReportLab-Backend.
from aspose.note import Document, SaveFormat
doc = Document("notebook.one")
doc.Save("output.pdf", SaveFormat.Pdf)PdfSaveOptions
| Option | Typ der | Beschreibung |
|---|---|---|
PageIndex | int | Nullbasierter Index der ersten zu exportierenden Seite (Standard: 0, erste Seite) |
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 der | Status der |
|---|---|
SaveFormat.Pdf | Implementiert (erfordert ReportLab) |
FileFormat
Document.FileFormat liefert eine Best-effort-Angabe der OneNote Dateiformatsversion. Das Enum deklariert drei Werte:
| Wert der | 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
| Beschränkung | Einzelheiten |
|---|---|
| Nur zum Lesen | Ich schreibe zurück an: .one Format nicht implementiert |
| Keine Verschlüsselung . | Verschlüsselte Dokumente heben sich an. IncorrectPasswordException |
| PDF nur für den Export | andere SaveFormat Werte erhöhen UnsupportedSaveFormatException |
| ReportLab für PDF erforderlich | Installieren pip install "aspose-note[pdf]" getrennt |
GetPageHistory gibt eine Liste mit einem Element zurück | Die gesamte Seitenverlaufserfassung ist ein Stub; liefert zurück [page] |
DetectLayoutChanges() | Kompatibilitätsstück; keine Operation |
Tipps und beste Praktiken
- Keine Prüfung:
Page.Title,Title.TitleText,OutlineElement.NumberList, und die meisten Metadatenfelder könnenNone.- Immer mit der Wache .if x is not Noneoderif xVor dem Zugang zu Immobilien. - Verwendung
GetChildNodes(Type)Sie sucht den gesamten Unterbaum. - Iterative direkte Kinder mit:
for child in nodeWenn man nur unmittelbare Kinder braucht. - Verwenden Sie die Kodierung in Windows:Auf Windows:,
sys.stdoutkann eine alte Code-Seite verwenden. Hinzufügensys.stdout.reconfigure(encoding="utf-8", errors="replace")bei Start beim Drucken von Unicode-Text. - Installieren
[pdf]zusätzliche: PDF-Export erfordert ReportLab. Ausführenpip install "aspose-note[pdf]"vor der AnwendungSaveFormat.Pdf.Ohne ReportLab erhöht das Speichern in PDF eineImportErrorbei der Ausführung.