Prehľad funkcií — Aspose.Note FOSS pre Python

Aspose.Note FOSS for Python (package aspose-note, version 26.3.1) poskytuje Python API pre čítanie Microsoft OneNote .one súborov sekcií a ich exportovanie do PDF. Všetky nižšie uvedené funkcie sú overené proti zdrojovému kódu repozitára, README a ukážkovým skriptom.

Inštalácia a nastavenie

Inštalácia z PyPI:

pip install aspose-note

Pre podporu exportu do PDF (vyžaduje ReportLab):

pip install "aspose-note[pdf]"

Požiadavky: Python 3.10 alebo novší. Nie je potrebná inštalácia Microsoft Office.


Funkcie a možnosti

.Načítanie súborov .one

Načítajte súbory sekcií Microsoft OneNote z cesty k súboru alebo akéhokoľvek binárneho prúdu (súborový handle, io.BytesIO, telo HTTP odpovede, prúd cloud úložiska).

  • Document.FileFormat poskytuje najlepší možný odhad verzie formátu súboru OneNote (OneNote2010, OneNoteOnline alebo OneNote2007)
  • Načítanie založené na prúde eliminuje diskové I/O pre pracovné postupy v pamäti alebo cez sieť
  • LoadOptions.LoadHistory flag určuje, či je história stránok zahrnutá v DOM
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)

Prechádzanie DOM dokumentu

Celý dokument OneNote je vystavený ako strom typovaných Python objektov. Každý uzol dedí z Node alebo CompositeNode:

  • Document: koreň; vystavuje DisplayName, CreationTime, FileFormat
  • Page: priamy potomok Document; vystavuje Title, Author, CreationTime, LastModifiedTime, Level
  • Title: vystavuje TitleText, TitleDate, TitleTime (všetky RichText uzly)
  • Outline: pozičný kontajner s HorizontalOffset, VerticalOffset, MaxWidth, MaxHeight, MinWidth, ReservedWidth, IndentPosition
  • OutlineElement: listový kontajner; vystavuje NumberList

Metódy navigácie na CompositeNode:

Metóda / VlastnosťPopis
FirstChild, LastChildPriamy prístup k priamemu potomkovi
GetChildNodes(Type)Rekurzívne, typovo filtrované vyhľadávanie
AppendChildLast(node)Pridať podriadený na koniec
AppendChildFirst(node)Pridať podriadený na začiatok
InsertChild(index, node)Vložiť na pozíciu
RemoveChild(node)Odstrániť podriadený
for child in nodeIterovať priame podriadené
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}")

Extrahovanie obsahu Rich Text

RichText uzly vystavujú:

  • Text: str: úplný čistý textový reťazec
  • TextRuns: list[TextRun]: zoznam formátovaných segmentov
  • Tags: list[NoteTag]: OneNote značky pripojené k tomuto bloku
  • Append(text, style=None): pridať textový úsek v pamäti
  • Replace(old_value, new_value): substitúcia reťazca v pamäti

Každý TextRun nesie:

VlastnosťTypPopis
TextstrText segmentu
StyleTextStyleFormátovacie metadáta

TextStyle vlastnosti:

VlastnosťTyp
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}")

Extrahovanie obrázkov

Image uzly odhaľujú surové bajty a metadáta pre každý vložený obrázok:

VlastnosťTypPopis
FileName`strNone`
BytesbytesSurové dáta obrázka
Width, Height`floatNone`
AlternativeTextTitle`strNone`
AlternativeTextDescription`strNone`
HyperlinkUrl`strNone`
Tagslist[NoteTag]Pripojené značky OneNote
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)")

Extrahovanie pripojených súborov

AttachedFile uzly odhaľujú vložené prílohy súborov:

VlastnosťTypPopis
FileName`strNone`
BytesbytesSurové dáta súboru
Tagslist[NoteTag]Pripojené značky OneNote
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)

Analyzovanie tabuliek

Table, TableRow, a TableCell odhaľuje úplnú štruktúru tabuľky:

TriedaKľúčové vlastnosti
TableColumns: list[TableColumn] (každý TableColumn.Width a .LockedWidth), IsBordersVisible: bool, Tags: list[NoteTag]
TableRowPrechádzajte bunky cez GetChildNodes(TableCell)
TableCellObsahuje RichText, Image, a ďalšie uzly obsahu
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)

Inšpekcia OneNote značiek

NoteTag sa objavuje na RichText, Image, AttachedFile, a Table uzly cez ich .Tags vlastnosť. OutlineElement nemá .Tags vlastnosť. NoteTag vlastnosti:

VlastnosťTypPopis
Icon`intNone`
Label`strNone`
FontColor`intNone`
Highlight`intNone`
CreationTime`datetimeNone`
CompletedTime`datetimeNone`

Továrenská metóda: NoteTag.CreateYellowStar() vytvára štandardný uzol značky s žltou hviezdou.

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})")

Podpora číslovaných zoznamov

OutlineElement.NumberList zverejňuje:

VlastnosťTypPopis
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}")

Prechádzanie DocumentVisitor

DocumentVisitor poskytuje vzor návštevníka pre štruktúrované prechádzanie celým dokumentom. Prepíšte akýkoľvek VisitXxxStart / VisitXxxEnd metódu na zachytenie špecifických typov uzlov:

  • 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}")

Export do PDF

Ulož načítaný dokument do PDF pomocou Document.Save(). Podporované prostredníctvom voliteľného backendu ReportLab.

from aspose.note import Document, SaveFormat

doc = Document("notebook.one")
doc.Save("output.pdf", SaveFormat.Pdf)

PdfSaveOptions

MožnosťTypPopis
PageIndexintPole existuje; neodovzdávané PDF exportéru vo verzii v26.3.1 (nemá žiadny vplyv)
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()

Referencie formátov a enumov

SaveFormat

HodnotaStav
SaveFormat.PdfImplementované (vyžaduje ReportLab)

FileFormat

Document.FileFormat poskytuje najlepšie úsilie o určenie verzie formátu súboru OneNote. Enum deklaruje tri hodnoty:

HodnotaPopis
FileFormat.OneNote2010Formát OneNote 2010
FileFormat.OneNoteOnlineFormát OneNote Online
FileFormat.OneNote2007Formát OneNote 2007

NodeType

NodeType.Document, NodeType.Page, NodeType.Outline, NodeType.OutlineElement, NodeType.RichText, NodeType.Image, NodeType.Table, NodeType.AttachedFile

HorizontalAlignment

HorizontalAlignment.Left, HorizontalAlignment.Center, HorizontalAlignment.Right


Aktuálne obmedzenia

ObmedzenieDetail
Iba na čítanieZápis späť do .one formát nie je implementovaný
Žiadne šifrovanieŠifrované dokumenty vyvolávajú IncorrectPasswordException
PDF iba pre exportIné SaveFormat hodnoty vyvolávajú UnsupportedSaveFormatException
ReportLab je vyžadovaný pre PDFInštalovať pip install "aspose-note[pdf]" samostatne
GetPageHistory vracia jednoprvkový zoznamPlná prechádzka históriou stránok je len náčrt; vracia [page]
DetectLayoutChanges()Kompatibilný náčrt; žiadna operácia

Tipy a osvedčené postupy

  • Skontrolujte, či je None: Page.Title, Title.TitleText, OutlineElement.NumberList, a väčšina polí metadát môže byť None. Vždy chráňte pomocou if x is not None alebo if x pred prístupom k vlastnostiam.
  • Použite GetChildNodes(Type) na rekurzívne vyhľadávanie namiesto manuálneho prechádzania stromu. Vyhľadáva celý podstrom.
  • Iterovať priamych potomkov s for child in node keď potrebujete iba okamžitých potomkov.
  • Spracovať kódovanie vo Windows: Vo Windows, sys.stdout môže používať staršiu kódovú stránku. Pridajte sys.stdout.reconfigure(encoding="utf-8", errors="replace") pri spustení pri tlači Unicode textu.
  • Nainštalujte [pdf] dodatočné: Neimportujte SaveFormat.Pdf funkcionalitu bez predchádzajúcej inštalácie pip install "aspose-note[pdf]". Bez ReportLab bude ukladanie do PDF vyvolávať chybu importu počas behu.
 Slovenčina