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

Fü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.FileFormat liefert 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.LoadHistory Flag 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 bereit DisplayName, CreationTime, FileFormat
  • Page: direktes Kind von Document; stellt bereit Title, Author, CreationTime, LastModifiedTime, Level
  • Title: exponiert TitleText, TitleDate, TitleTime (alle RichText Knoten)
  • Outline: positionsbasierter Container mit HorizontalOffset, VerticalOffset, MaxWidth, MaxHeight, MinWidth, ReservedWidth, IndentPosition
  • OutlineElement: Blatt-Container; exponiert NumberList

Navigationsmethoden für CompositeNode:

Methode / EigenschaftBeschreibung
FirstChild, LastChildDirekter 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 nodeDirekte 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-String
  • TextRuns: list[TextRun]: Liste formatierter Segmente
  • Tags: list[NoteTag]: OneNote-Tags, die an diesem Block angehängt sind
  • Append(text, style=None): Textlauf im Speicher anhängen
  • Replace(old_value, new_value): String-Ersetzung im Speicher

Jeder TextRun trägt:

EigenschaftTypBeschreibung
TextstrSegmenttext
StyleTextStyleFormatierungsmetadaten

TextStyle Eigenschaften:

EigenschaftTyp
IsBold, IsItalic, IsUnderline, IsStrikethroughbool
IsSuperscript, IsSubscriptbool
FontName`str
FontSize`float
FontColor, Highlight`int
Language`int
IsHyperlinkbool
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:

EigenschaftTypBeschreibung
FileName`strNone`
BytesbytesRohbilddaten
Width, Height`floatNone`
AlternativeTextTitle`strNone`
AlternativeTextDescription`strNone`
HyperlinkUrl`strNone`
Tagslist[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:

EigenschaftTypBeschreibung
FileName`strNone`
BytesbytesRohdateidaten
Tagslist[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:

KlasseSchlüsseleigenschaften
TableColumns: list[TableColumn] (jede TableColumn hat .Width und .LockedWidth), IsBordersVisible: bool, Tags: list[NoteTag]
TableRowZellen iterieren über GetChildNodes(TableCell)
TableCellEnthä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:

EigenschaftTypBeschreibung
Icon`intNone`
Label`strNone`
FontColor`intNone`
Highlight`intNone`
CreationTime`datetimeNone`
CompletedTime`datetimeNone`

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:

EigenschaftTypBeschreibung
Format`strNone`
Restart`intNone`
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

OptionTypBeschreibung
PageIndexintFeld existiert; nicht an den PDF-Exporter in v26.3.1 weitergeleitet (hat keine Auswirkung)
PageCount`intNone`
ImageCompression`AnyNone`
JpegQuality`intNone`
PageSettings`AnyNone`
PageSplittingAlgorithm`AnyNone`
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

WertStatus
SaveFormat.PdfImplementiert (erfordert ReportLab)

FileFormat

Document.FileFormat gibt einen best‑effort Hinweis auf die OneNote-Dateiformatversion. Das Enum deklariert drei Werte:

WertBeschreibung
FileFormat.OneNote2010OneNote‑2010‑Format
FileFormat.OneNoteOnlineOneNote‑Online‑Format
FileFormat.OneNote2007OneNote‑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änkungDetail
Nur lesbarZurückschreiben nach .one Format ist nicht implementiert
Keine VerschlüsselungVerschlüsselte Dokumente lösen aus IncorrectPasswordException
PDF nur zum ExportAndere SaveFormat Werte lösen aus UnsupportedSaveFormatException
ReportLab für PDF erforderlichInstallieren pip install "aspose-note[pdf]" separat
GetPageHistory gibt eine Ein-Element-Liste zurückDie 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önnen None. Immer mit if x is not None oder if x bevor 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 node wenn Sie nur unmittelbare Kinder benötigen.
  • Kodierung unter Windows behandeln: Unter Windows, sys.stdout kann eine veraltete Codepage verwenden. Fügen Sie sys.stdout.reconfigure(encoding="utf-8", errors="replace") beim Start, wenn Unicode-Text ausgegeben wird.
  • Installieren [pdf] zusätzlich: Nicht importieren SaveFormat.Pdf Funktionalität, ohne sie zuerst zu installieren pip install "aspose-note[pdf]". Ohne ReportLab wird das Speichern als PDF zur Laufzeit einen Importfehler auslösen.
 Deutsch