Pregled značajki — Aspose.Note FOSS za Python

Aspose.Note FOSS for Python (package aspose-note, verzija 26.3.1) pruža Python API za čitanje Microsoft OneNote .one datoteke odjeljaka i njihov izvoz u PDF. Sve značajke navedene u nastavku provjerene su prema izvornom kodu repozitorija, README-u i primjerima skripti.

Instalacija i postavljanje

Instalirajte s PyPI:

pip install aspose-note

Za podršku izvoza u PDF (zahtijeva ReportLab):

pip install "aspose-note[pdf]"

Zahtjevi: Python 3.10 ili noviji. Nije potrebna instalacija Microsoft Officea.


Značajke i mogućnosti

.Učitavanje .one datoteka

Učitaj Microsoft OneNote datoteke odjeljaka iz putanje datoteke ili bilo kojeg binarnog toka (rukovatelj datotekom, io.BytesIO, tijelo HTTP odgovora, tok pohrane u oblaku).

  • Document.FileFormat pruža indikaciju najviše moguće točnosti verzije formata OneNote datoteke (OneNote2010, OneNoteOnline ili OneNote2007)
  • Učitavanje temeljeno na strimu eliminira I/O na disku za radne tokove u memoriji ili mrežne.
  • LoadOptions.LoadHistory oznaka kontrolira hoće li se povijest stranice uključiti u 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)

Prolazak kroz DOM dokumenta

Cijeli OneNote dokument izlaže se kao stablo tipiziranih Python objekata. Svaki čvor nasljeđuje od Node ili CompositeNode:

  • Document: korijen; izlaže DisplayName, CreationTime, FileFormat
  • Page: izravni potomak od Document; izlaže Title, Author, CreationTime, LastModifiedTime, Level
  • Title: izlaže TitleText, TitleDate, TitleTime (svi RichText čvorovi)
  • Outline: kontejner pozicije s HorizontalOffset, VerticalOffset, MaxWidth, MaxHeight, MinWidth, ReservedWidth, IndentPosition
  • OutlineElement: kontejner list; izlaže NumberList

Metode navigacije na CompositeNode:

Metoda / SvojstvoOpis
FirstChild, LastChildIzravni pristup djetetu
GetChildNodes(Type)Rekurzivna, filtrirana po tipu pretraga
AppendChildLast(node)Dodaj dijete na kraj
AppendChildFirst(node)Dodaj dijete na početak
InsertChild(index, node)Umetni na poziciju
RemoveChild(node)Ukloni dijete
for child in nodeIteriraj izravna djeca
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}")

Ekstrakcija sadržaja obogaćenog teksta

RichText čvorovi izlažu:

  • Text: str: cijeli obični tekstualni niz
  • TextRuns: list[TextRun]: popis formatiranih segmenata
  • Tags: list[NoteTag]: OneNote oznake pridružene ovom bloku
  • Append(text, style=None): dodaj tekstualni niz u memoriji
  • Replace(old_value, new_value): zamjena niza u memoriji

Svaki TextRun sadrži:

SvojstvoTipOpis
TextstrTekst segmenta
StyleTextStyleMetapodaci formatiranja

TextStyle svojstva:

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

Ekstrakcija slika

Image čvorovi izlažu sirove bajtove i metapodatke za svaku ugrađenu sliku:

SvojstvoVrstaOpis
FileName`strNone`
BytesbytesSirovi podaci slike
Width, Height`floatNone`
AlternativeTextTitle`strNone`
AlternativeTextDescription`strNone`
HyperlinkUrl`strNone`
Tagslist[NoteTag]Priložene OneNote oznake
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)")

Ekstrakcija priloženih datoteka

AttachedFile čvorovi izlažu ugrađene datoteke privitaka:

SvojstvoVrstaOpis
FileName`strNone`
BytesbytesSirovi podaci datoteke
Tagslist[NoteTag]Priložene OneNote oznake
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)

Parsiranje tablica

Table, TableRow, i TableCell izloži cijelu strukturu tablice:

KlasaKljučna svojstva
TableColumns: list[TableColumn] (svaki TableColumn ima .Width i .LockedWidth), IsBordersVisible: bool, Tags: list[NoteTag]
TableRowProđi kroz ćelije putem GetChildNodes(TableCell)
TableCellSadrži RichText, Image, i druge čvorove sadržaja
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)

Pregled OneNote oznaka

NoteTag pojavljuje se na RichText, Image, AttachedFile, i Table čvorovi putem njihovog .Tags svojstva. OutlineElement nema .Tags svojstvo. NoteTag svojstva:

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

Metoda tvornice: NoteTag.CreateYellowStar() stvara standardni čvor oznake žute zvijezde.

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

Podrška za numerirane popise

OutlineElement.NumberList izlaže:

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

Prolaz DocumentVisitor-a

DocumentVisitor omogućuje obrazac posjetitelja za strukturirano pretraživanje cijelog dokumenta. Nadjačajte bilo koji VisitXxxStart / VisitXxxEnd metodu za presretanje određenih vrsta čvorova:

  • 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 izvoz

Spremi učitani dokument u PDF koristeći Document.Save(). Podržano putem opcionalnog ReportLab backenda.

from aspose.note import Document, SaveFormat

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

PdfSaveOptions

OpcijaTipOpis
PageIndexintPolje postoji; ne prosljeđuje se PDF izvoznika u v26.3.1 (nema učinka)
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()

Referenca formata i enumeracija

SaveFormat

VrijednostStanje
SaveFormat.PdfImplementirano (zahtijeva ReportLab)

FileFormat

Document.FileFormat pruža indikaciju verzije OneNote formata datoteke na najbolji mogući način. Enum deklarira tri vrijednosti:

VrijednostOpis
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


Trenutna ograničenja

OgraničenjeDetalj
Samo za čitanjePisanje natrag u .one format nije implementiran
Nema šifriranjaŠifrirani dokumenti uzrokuju IncorrectPasswordException
PDF samo za izvozOstalo SaveFormat vrijednosti uzrokuju UnsupportedSaveFormatException
ReportLab je potreban za PDFInstaliraj pip install "aspose-note[pdf]" odvojeno
GetPageHistory vraća listu s jednim elementomPotpuno traversiranje povijesti stranice je zamjenski kod; vraća [page]
DetectLayoutChanges()Kompatibilni zamjenski kod; bez operacije

Savjeti i najbolje prakse

  • Provjeri None: Page.Title, Title.TitleText, OutlineElement.NumberList, a većina polja metapodataka može biti None. Uvijek zaštiti s if x is not None ili if x prije pristupa svojstvima.
  • Koristite GetChildNodes(Type) za rekurzivno pretraživanje umjesto ručnog prolaska kroz stablo. Pretražuje cijelo podstablo.
  • Iterirajte izravne potomke s for child in node kada su vam potrebni samo neposredni potomci.
  • Rukovanje kodiranjem na Windowsu: Na Windowsu, sys.stdout može koristiti staru kodnu stranicu. Dodajte sys.stdout.reconfigure(encoding="utf-8", errors="replace") prilikom pokretanja kada ispisujete Unicode tekst.
  • Instalirajte [pdf] dodatne: Nemojte uvesti SaveFormat.Pdf funkcionalnost bez prethodne instalacije pip install "aspose-note[pdf]". Bez ReportLaba, spremanje u PDF će izazvati grešku uvoza u vrijeme izvođenja.
 Hrvatski