Panoramica delle funzionalità — Aspose.Note FOSS per Python

Aspose.Note FOSS for Python (package aspose-note, version 26.3.1) fornisce un’API Python per la lettura di Microsoft OneNote .one file di sezione e l’esportazione in PDF. Tutte le funzionalità elencate di seguito sono verificate rispetto al codice sorgente del repository, al README e agli script di esempio.

Installazione e Configurazione

Installa da PyPI:

pip install aspose-note

Per il supporto all’esportazione PDF (richiede ReportLab):

pip install "aspose-note[pdf]"

Requisiti: Python 3.10 o successiva. Non è necessaria l’installazione di Microsoft Office.


Funzionalità e Capacità

.Caricamento file .one

Carica i file di sezione Microsoft OneNote da un percorso file o da qualsiasi flusso binario (handle del file, io.BytesIO, corpo della risposta HTTP, flusso di archiviazione cloud).

  • Document.FileFormat fornisce un’indicazione di massima della versione del formato file OneNote (OneNote2010, OneNoteOnline o OneNote2007)
  • Il caricamento basato su stream elimina le operazioni I/O su disco per flussi di lavoro in memoria o di rete
  • LoadOptions.LoadHistory il flag controlla se la cronologia delle pagine è inclusa nel 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)

Attraversamento del DOM del documento

L’intero documento OneNote è esposto come un albero di oggetti Python tipizzati. Ogni nodo eredita da Node oppure CompositeNode:

  • Document: radice; espone DisplayName, CreationTime, FileFormat
  • Page: figlio diretto di Document; espone Title, Author, CreationTime, LastModifiedTime, Level
  • Title: espone TitleText, TitleDate, TitleTime (tutti RichText nodi)
  • Outline: contenitore posizionale con HorizontalOffset, VerticalOffset, MaxWidth, MaxHeight, MinWidth, ReservedWidth, IndentPosition
  • OutlineElement: contenitore foglia; espone NumberList

Metodi di navigazione su CompositeNode:

Metodo / ProprietàDescrizione
FirstChild, LastChildAccesso al figlio diretto
GetChildNodes(Type)Ricerca ricorsiva, filtrata per tipo
AppendChildLast(node)Aggiungi figlio alla fine
AppendChildFirst(node)Aggiungi figlio all’inizio
InsertChild(index, node)Inserisci in posizione
RemoveChild(node)Rimuovi un figlio
for child in nodeItera i figli diretti
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}")

Estrazione del contenuto Rich Text

RichText i nodi espongono:

  • Text: str: stringa di testo semplice completa
  • TextRuns: list[TextRun]: elenco di segmenti formattati
  • Tags: list[NoteTag]: tag OneNote allegati a questo blocco
  • Append(text, style=None): aggiungi un run di testo in memoria
  • Replace(old_value, new_value): sostituzione di stringa in memoria

Ogni TextRun contiene:

ProprietàTipoDescrizione
TextstrTesto del segmento
StyleTextStyleMetadati di formattazione

TextStyle proprietà:

ProprietàTipo
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}")

Estrazione delle immagini

Image i nodi espongono byte grezzi e metadati per ogni immagine incorporata:

ProprietàTipoDescrizione
FileName`strNone`
BytesbytesDati immagine grezzi
Width, Height`floatNone`
AlternativeTextTitle`strNone`
AlternativeTextDescription`strNone`
HyperlinkUrl`strNone`
Tagslist[NoteTag]Tag OneNote allegati
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)")

Estrazione di file allegati

AttachedFile i nodi espongono allegati di file incorporati:

ProprietàTipoDescrizione
FileName`strNone`
BytesbytesDati grezzi del file
Tagslist[NoteTag]Tag OneNote allegati
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)

Analisi delle tabelle

Table, TableRow, e TableCell esporre la struttura completa della tabella:

ClasseProprietà chiave
TableColumns: list[TableColumn] (ogni TableColumn ha .Width e .LockedWidth), IsBordersVisible: bool, Tags: list[NoteTag]
TableRowIterare le celle tramite GetChildNodes(TableCell)
TableCellContiene RichText, Image, e altri nodi di contenuto
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)

Ispezione dei tag OneNote

NoteTag compare su RichText, Image, AttachedFile, e Table nodi tramite il loro .Tags proprietà. OutlineElement non ha un .Tags proprietà. NoteTag proprietà:

ProprietàTipoDescrizione
Icon`intNone`
Label`strNone`
FontColor`intNone`
Highlight`intNone`
CreationTime`datetimeNone`
CompletedTime`datetimeNone`

Metodo factory: NoteTag.CreateYellowStar() crea un nodo tag a stella gialla standard.

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

Supporto per elenchi numerati

OutlineElement.NumberList espone:

ProprietàTipoDescrizione
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}")

Attraversamento di DocumentVisitor

DocumentVisitor fornisce un pattern visitor per l’attraversamento strutturato dell’intero documento. Sovrascrivi qualsiasi VisitXxxStart / VisitXxxEnd metodo per intercettare tipi di nodo specifici:

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

Esportazione PDF

Salva un documento caricato in PDF usando Document.Save(). Supportato tramite il backend opzionale ReportLab.

from aspose.note import Document, SaveFormat

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

PdfSaveOptions

OpzioneTipoDescrizione
PageIndexintIl campo esiste; non inoltrato all’esportatore PDF in v26.3.1 (non ha effetto)
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()

Riferimento a Formato e Enum

SaveFormat

ValoreStato
SaveFormat.PdfImplementato (richiede ReportLab)

FileFormat

Document.FileFormat fornisce un’indicazione approssimativa della versione del formato file OneNote. L’enumerazione dichiara tre valori:

ValoreDescrizione
FileFormat.OneNote2010Formato OneNote 2010
FileFormat.OneNoteOnlineFormato OneNote Online
FileFormat.OneNote2007Formato 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


Limitazioni attuali

LimitazioneDettaglio
Sola letturaScrittura su .one il formato non è implementato
Nessuna crittografiaI documenti crittografati generano IncorrectPasswordException
Solo PDF per l’esportazioneAltro SaveFormat i valori generano UnsupportedSaveFormatException
ReportLab richiesto per PDFInstalla pip install "aspose-note[pdf]" separatamente
GetPageHistory restituisce una lista a singolo elementoIl percorso completo della cronologia della pagina è un placeholder; restituisce [page]
DetectLayoutChanges()Placeholder di compatibilità; nessuna operazione

Suggerimenti e migliori pratiche

  • Verifica se è None: Page.Title, Title.TitleText, OutlineElement.NumberList, e la maggior parte dei campi metadata può essere None. Proteggi sempre con if x is not None oppure if x prima di accedere alle proprietà.
  • Usa GetChildNodes(Type) per la ricerca ricorsiva invece di iterare manualmente l’albero. Cerca l’intero sottoalbero.
  • Itera i figli diretti con for child in node quando ti servono solo i figli immediati.
  • Gestisci la codifica su Windows: Su Windows, sys.stdout potrebbe usare una pagina di codifica legacy. Aggiungi sys.stdout.reconfigure(encoding="utf-8", errors="replace") all’avvio quando stampi testo Unicode.
  • Installa [pdf] extra: Non importare SaveFormat.Pdf funzionalità senza prima installare pip install "aspose-note[pdf]". Senza ReportLab, il salvataggio in PDF genererà un errore di importazione a runtime.
 Italiano