Pregled funkcija — Aspose.Note FOSS za Python

Aspose.Note FOSS for Python (package aspose-note, version 26.3.1) pruža Python API za čitanje Microsoft OneNote .one sekcijskih fajlova i njihovog izvoza u PDF. Sve funkcije navedene ispod su proverene u odnosu na izvorni kod repozitorijuma, README i primer skripti.

Instalacija i podešavanje

Instalirajte sa PyPI:

pip install aspose-note

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

pip install "aspose-note[pdf]"

Zahtevi: Python 3.10 ili noviji. Nije potrebna instalacija Microsoft Office-a.


Funkcionalnosti i mogućnosti

.Učitavanje .one fajla

Učitaj Microsoft OneNote sekcijske fajlove iz putanje fajla ili bilo kog binarnog toka (file handle, io.BytesIO, telo HTTP odgovora, cloud storage stream).

  • Document.FileFormat pruža najbolju moguću indikaciju verzije formata OneNote fajla (OneNote2010, OneNoteOnline, ili OneNote2007)
  • Učitavanje zasnovano na stream-u eliminiše I/O na disku za rad u memoriji ili mrežne tokove
  • LoadOptions.LoadHistory zastavica kontroliše da li je istorija stranice uključena 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

Ceo OneNote dokument je izložen kao stablo tipiziranih Python objekata. Svaki čvor nasleđuje od Node ili CompositeNode:

  • Document: koren; izlaže DisplayName, CreationTime, FileFormat
  • Page: direktno dete od Document; izlaže Title, Author, CreationTime, LastModifiedTime, Level
  • Title: izlaže TitleText, TitleDate, TitleTime (sve RichText čvorova)
  • Outline: pozicioni kontejner sa HorizontalOffset, VerticalOffset, MaxWidth, MaxHeight, MinWidth, ReservedWidth, IndentPosition
  • OutlineElement: listni kontejner; izlaže NumberList

Metode navigacije na CompositeNode:

Metod / SvojstvoOpis
FirstChild, LastChildDirektan pristup detetu
GetChildNodes(Type)Rekurzivna pretraga filtrirana po tipu
AppendChildLast(node)Dodaj dete na kraj
AppendChildFirst(node)Dodaj dete na početak
InsertChild(index, node)Umetni na poziciju
RemoveChild(node)Ukloni dete
for child in nodeIteriraj direktna deca
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: potpuni obični tekstualni string
  • TextRuns: list[TextRun]: lista formatiranih segmenata
  • Tags: list[NoteTag]: OneNote oznake prikačene na ovaj blok
  • Append(text, style=None): dodaj tekstualni niz u memoriji
  • Replace(old_value, new_value): zamena stringa u memoriji

Svaki TextRun sadrži:

SvojstvoTipOpis
TextstrTekst segmenta
StyleTextStyleMetapodaci formatiranja

TextStyle svojstva:

SvojstvoTip
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:

SvojstvoTipOpis
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 fajlova

AttachedFile nodes izlažu ugrađene priloge datoteka:

SvojstvoTipOpis
FileName`strNone`
BytesbytesSirovi podaci fajla
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 tabela

Table, TableRow, i TableCell prikaži punu strukturu tabele:

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

Inspekcija OneNote oznaka

NoteTag pojavljuje se na RichText, Image, AttachedFile, i Table čvorove putem njihovih .Tags svojstvo. OutlineElement ne poseduje .Tags svojstvo. NoteTag svojstva:

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

Fabrika metoda: NoteTag.CreateYellowStar() kreira standardni čvor oznake žute zvezde.

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 numerisane liste

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 kroz DocumentVisitor

DocumentVisitor obezbeđuje obrazac posetioca za strukturirano pretraživanje celog dokumenta. Prepišite bilo koji VisitXxxStart / VisitXxxEnd metod za presretanje određenih tipova č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

Sačuvajte 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; nije prosleđeno PDF izvoznika u v26.3.1 (nema efekta)
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

VrednostStatus
SaveFormat.PdfImplementirano (zahteva ReportLab)

FileFormat

Document.FileFormat pruža indikaciju najbolje moguće verzije formata OneNote fajla. Enum definiše tri vrednosti:

VrednostOpis
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 nazad u .one format nije implementiran
Nema enkripcijeEnkriptovani dokumenti izazivaju IncorrectPasswordException
PDF samo za izvozOstalo SaveFormat vrednosti podižu UnsupportedSaveFormatException
ReportLab je potreban za PDFInstaliraj pip install "aspose-note[pdf]" odvojeno
GetPageHistory vraća listu sa jednim elementomPotpuno pretraživanje istorije stranice je stub; vraća [page]
DetectLayoutChanges()Stub za kompatibilnost; nema operacije

Saveti i najbolje prakse

  • Proveri da li je None: Page.Title, Title.TitleText, OutlineElement.NumberList, a većina polja metapodataka može biti None. Uvek zaštiti sa if x is not None ili if x pre pristupa svojstvima.
  • Koristi GetChildNodes(Type) za rekurzivno pretraživanje umesto ručnog iteriranja kroz stablo. Pretražuje čitavu podstablo.
  • Iteriraj direktna deca sa for child in node kada su vam potrebna samo neposredna deca.
  • Upravljajte kodiranjem na Windowsu: Na Windowsu, sys.stdout može koristiti staru kodnu stranicu. Dodajte sys.stdout.reconfigure(encoding="utf-8", errors="replace") pri pokretanju prilikom ispisivanja Unicode teksta.
  • Instalirajte [pdf] dodatno: Ne uvozi SaveFormat.Pdf funkcionalnost bez prethodnog instaliranja pip install "aspose-note[pdf]". Bez ReportLab, čuvanje u PDF-u će izazvati grešku pri uvozu u vreme izvršavanja.
 Српски