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

Für die Unterstützung des Exports von PDF (erfordert ReportLab):

pip install aspose-note

Anforderungen: 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.FileFormat bietet 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.LoadHistory Flagge-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; zeigt DisplayName, CreationTime, FileFormat
  • Page: unmittelbares Kind von: Document;, zeigt auf Title, Author, CreationTime, LastModifiedTime, Level
  • Title: zeigt TitleText, TitleDate, TitleTime (alle RichText Knoten)
  • Outline: Positionsbehälter mit HorizontalOffset, VerticalOffset, MaxWidth, MaxHeight, MinWidth, ReservedWidth, IndentPosition
  • OutlineElement: Blätterbehälter; Exposure NumberList

Navigationsmethoden auf der CompositeNode:

Methode / EigenschaftBeschreibung
FirstChild, LastChildDirekter 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 nodeIterative 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 Form
  • TextRuns: list[TextRun]: Liste der formatierten Segmente
  • Tags: list[NoteTag]: OneNote-Tags, die an diesen Block angebracht sind
  • Append(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ögenswerteTyp derBeschreibung
TextstrSegmenttext
StyleTextStyleMetadatenformatierung

TextStyle Eigenschaften:

Immobilien und VermögenswerteTyp der
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}")

Bildentnahme

Image Knoten stellen Rohbyte und Metadaten für jedes eingebettete Bild zur Verfügung:

Immobilien und VermögenswerteTyp derBeschreibung
FileName`strNone`
BytesbytesRohbilddaten
Width, Height`floatNone`
AlternativeTextTitle`strNone`
AlternativeTextDescription`strNone`
HyperlinkUrl`strNone`
Tagslist[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ögenswerteTyp derBeschreibung
FileName`strNone`
BytesbytesRohdatei-Daten
Tagslist[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:

KlasseSchlüsselmerkmale
TableColumns: list[TableColumn] (jeweils TableColumn hat .Width und .LockedWidth), IsBordersVisible: bool, Tags: list[NoteTag]
TableRowIterationszellen ü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-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ögenswerteTyp derBeschreibung
Icon`intNone`
Label`strNone`
FontColor`intNone`
Highlight`intNone`
CreationTime`datetimeNone`
CompletedTime`datetimeNone`

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ögenswerteTyp derBeschreibung
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}")

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

OptionTyp derBeschreibung
PageIndexintNullbasierter Index der ersten zu exportierenden Seite (Standard: 0, erste Seite)
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

Wert derStatus der
SaveFormat.PdfImplementiert (erfordert ReportLab)

FileFormat

Document.FileFormat liefert eine Best-effort-Angabe der OneNote Dateiformatsversion. Das Enum deklariert drei Werte:

Wert derBeschreibung
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

BeschränkungEinzelheiten
Nur zum LesenIch schreibe zurück an: .one Format nicht implementiert
Keine Verschlüsselung .Verschlüsselte Dokumente heben sich an. IncorrectPasswordException
PDF nur für den Exportandere SaveFormat Werte erhöhen UnsupportedSaveFormatException
ReportLab für PDF erforderlichInstallieren pip install "aspose-note[pdf]" getrennt
GetPageHistory gibt eine Liste mit einem Element zurückDie 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önnen None.- Immer mit der Wache . if x is not None oder if x Vor dem Zugang zu Immobilien.
  • Verwendung GetChildNodes(Type) Sie sucht den gesamten Unterbaum.
  • Iterative direkte Kinder mit: for child in node Wenn man nur unmittelbare Kinder braucht.
  • Verwenden Sie die Kodierung in Windows:Auf Windows:, sys.stdout kann eine alte Code-Seite verwenden. Hinzufügen sys.stdout.reconfigure(encoding="utf-8", errors="replace") bei Start beim Drucken von Unicode-Text.
  • Installieren [pdf] zusätzliche: PDF-Export erfordert ReportLab. Ausführen pip install "aspose-note[pdf]" vor der Anwendung SaveFormat.Pdf.Ohne ReportLab erhöht das Speichern in PDF eine ImportError bei der Ausführung.
 Deutsch