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-notePer 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.FileFormatfornisce 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.LoadHistoryil 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; esponeDisplayName,CreationTime,FileFormatPage: figlio diretto diDocument; esponeTitle,Author,CreationTime,LastModifiedTime,LevelTitle: esponeTitleText,TitleDate,TitleTime(tuttiRichTextnodi)Outline: contenitore posizionale conHorizontalOffset,VerticalOffset,MaxWidth,MaxHeight,MinWidth,ReservedWidth,IndentPositionOutlineElement: contenitore foglia; esponeNumberList
Metodi di navigazione su CompositeNode:
| Metodo / Proprietà | Descrizione |
|---|---|
FirstChild, LastChild | Accesso 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 node | Itera 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 completaTextRuns: list[TextRun]: elenco di segmenti formattatiTags: list[NoteTag]: tag OneNote allegati a questo bloccoAppend(text, style=None): aggiungi un run di testo in memoriaReplace(old_value, new_value): sostituzione di stringa in memoria
Ogni TextRun contiene:
| Proprietà | Tipo | Descrizione |
|---|---|---|
Text | str | Testo del segmento |
Style | TextStyle | Metadati di formattazione |
TextStyle proprietà:
| Proprietà | Tipo |
|---|---|
IsBold, IsItalic, IsUnderline, IsStrikethrough | bool |
IsSuperscript, IsSubscript | bool |
FontName | `str |
FontSize | `float |
FontColor, Highlight | `int |
Language | `int |
IsHyperlink | bool |
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à | Tipo | Descrizione |
|---|---|---|
FileName | `str | None` |
Bytes | bytes | Dati immagine grezzi |
Width, Height | `float | None` |
AlternativeTextTitle | `str | None` |
AlternativeTextDescription | `str | None` |
HyperlinkUrl | `str | None` |
Tags | list[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à | Tipo | Descrizione |
|---|---|---|
FileName | `str | None` |
Bytes | bytes | Dati grezzi del file |
Tags | list[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:
| Classe | Proprietà chiave |
|---|---|
Table | Columns: list[TableColumn] (ogni TableColumn ha .Width e .LockedWidth), IsBordersVisible: bool, Tags: list[NoteTag] |
TableRow | Iterare le celle tramite GetChildNodes(TableCell) |
TableCell | Contiene 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à | Tipo | Descrizione |
|---|---|---|
Icon | `int | None` |
Label | `str | None` |
FontColor | `int | None` |
Highlight | `int | None` |
CreationTime | `datetime | None` |
CompletedTime | `datetime | None` |
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à | Tipo | Descrizione |
|---|---|---|
Format | `str | None` |
Restart | `int | None` |
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
| Opzione | Tipo | Descrizione |
|---|---|---|
PageIndex | int | Il campo esiste; non inoltrato all’esportatore PDF in v26.3.1 (non ha effetto) |
PageCount | `int | None` |
ImageCompression | `Any | None` |
JpegQuality | `int | None` |
PageSettings | `Any | None` |
PageSplittingAlgorithm | `Any | None` |
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
| Valore | Stato |
|---|---|
SaveFormat.Pdf | Implementato (richiede ReportLab) |
FileFormat
Document.FileFormat fornisce un’indicazione approssimativa della versione del formato file OneNote. L’enumerazione dichiara tre valori:
| Valore | Descrizione |
|---|---|
FileFormat.OneNote2010 | Formato OneNote 2010 |
FileFormat.OneNoteOnline | Formato OneNote Online |
FileFormat.OneNote2007 | Formato 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
| Limitazione | Dettaglio |
|---|---|
| Sola lettura | Scrittura su .one il formato non è implementato |
| Nessuna crittografia | I documenti crittografati generano IncorrectPasswordException |
| Solo PDF per l’esportazione | Altro SaveFormat i valori generano UnsupportedSaveFormatException |
| ReportLab richiesto per PDF | Installa pip install "aspose-note[pdf]" separatamente |
GetPageHistory restituisce una lista a singolo elemento | Il 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ò essereNone. Proteggi sempre conif x is not Noneoppureif xprima 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 nodequando ti servono solo i figli immediati. - Gestisci la codifica su Windows: Su Windows,
sys.stdoutpotrebbe usare una pagina di codifica legacy. Aggiungisys.stdout.reconfigure(encoding="utf-8", errors="replace")all’avvio quando stampi testo Unicode. - Installa
[pdf]extra: Non importareSaveFormat.Pdffunzionalità senza prima installarepip install "aspose-note[pdf]". Senza ReportLab, il salvataggio in PDF genererà un errore di importazione a runtime.