Aperçu des fonctionnalités — Aspose.Note FOSS pour Python
Aspose.Note FOSS for Python (package aspose-note, version 26.3.1) fournit une API Python pour lire Microsoft OneNote .one les fichiers de section et les exporter en PDF. Toutes les fonctionnalités listées ci‑dessous ont été vérifiées par rapport au code source du dépôt, au README et aux scripts d’exemple.
Installation et configuration
Installez depuis PyPI :
pip install aspose-notePour la prise en charge de l’export PDF (nécessite ReportLab) :
pip install "aspose-note[pdf]"Exigences : Python 3.10 ou ultérieur. Aucune installation de Microsoft Office requise.
Fonctionnalités et capacités
.Chargement de fichiers .one
Chargez les fichiers de section Microsoft OneNote à partir d’un chemin de fichier ou de tout flux binaire (descripteur de fichier, io.BytesIO, corps de réponse HTTP, flux de stockage cloud).
Document.FileFormatfournit une indication approximative de la version du format de fichier OneNote (OneNote2010, OneNoteOnline ou OneNote2007)- Le chargement basé sur les flux élimine les E/S disque pour les flux de travail en mémoire ou réseau.
LoadOptions.LoadHistoryflag contrôle si l’historique des pages est inclus dans le 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)Parcours du DOM du document
Le document OneNote complet est exposé sous forme d’un arbre d’objets Python typés. Chaque nœud hérite de Node ou CompositeNode:
Document: racine; exposeDisplayName,CreationTime,FileFormatPage: enfant direct deDocument; exposeTitle,Author,CreationTime,LastModifiedTime,LevelTitle:exposeTitleText,TitleDate,TitleTime(toutRichTextnœuds)Outline: conteneur positionnel avecHorizontalOffset,VerticalOffset,MaxWidth,MaxHeight,MinWidth,ReservedWidth,IndentPositionOutlineElement: conteneur feuille ; exposeNumberList
Méthodes de navigation sur CompositeNode:
| Méthode / Propriété | Description |
|---|---|
FirstChild, LastChild | Accès direct à l’enfant |
GetChildNodes(Type) | Recherche récursive, filtrée par type |
AppendChildLast(node) | Ajouter un enfant à la fin |
AppendChildFirst(node) | Ajouter un enfant au début |
InsertChild(index, node) | Insérer à la position |
RemoveChild(node) | Supprimer un enfant |
for child in node | Itérer les enfants directs |
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}")Extraction de contenu texte enrichi
RichText les nœuds exposent :
Text: str: chaîne de texte brut complèteTextRuns: list[TextRun]: liste de segments formatésTags: list[NoteTag]: balises OneNote attachées à ce blocAppend(text, style=None): ajouter un segment de texte en mémoireReplace(old_value, new_value): substitution de chaîne en mémoire
Chaque TextRun contient :
| Propriété | Type | Description |
|---|---|---|
Text | str | Texte du segment |
Style | TextStyle | Métadonnées de formatage |
TextStyle propriétés :
| Propriété | Type |
|---|---|
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}")Extraction d’images
Image les nœuds exposent les octets bruts et les métadonnées pour chaque image intégrée :
| Propriété | Type | Description |
|---|---|---|
FileName | `str | None` |
Bytes | bytes | Données d’image brutes |
Width, Height | `float | None` |
AlternativeTextTitle | `str | None` |
AlternativeTextDescription | `str | None` |
HyperlinkUrl | `str | None` |
Tags | list[NoteTag] | Étiquettes OneNote jointes |
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)")Extraction de fichiers joints
AttachedFile nodes exposent les pièces jointes de fichiers intégrés :
| Propriété | Type | Description |
|---|---|---|
FileName | `str | None` |
Bytes | bytes | Données brutes du fichier |
Tags | list[NoteTag] | Étiquettes OneNote jointes |
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)Analyse de tableau
Table, TableRow, et TableCell expose la structure complète de la table :
| Classe | Propriétés clés |
|---|---|
Table | Columns: list[TableColumn] (chaque TableColumn a .Width et .LockedWidth), IsBordersVisible: bool, Tags: list[NoteTag] |
TableRow | Itérer les cellules via GetChildNodes(TableCell) |
TableCell | Contient RichText, Image, et d’autres nœuds de contenu |
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)Inspection des balises OneNote
NoteTag apparaît sur RichText, Image, AttachedFile, et Table nœuds via leur .Tags propriété. OutlineElement n’a pas de .Tags propriété. NoteTag propriétés:
| Propriété | Type | Description |
|---|---|---|
Icon | `int | None` |
Label | `str | None` |
FontColor | `int | None` |
Highlight | `int | None` |
CreationTime | `datetime | None` |
CompletedTime | `datetime | None` |
Méthode d’usine: NoteTag.CreateYellowStar() crée un nœud de tag étoile jaune 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})")Prise en charge des listes numérotées
OutlineElement.NumberList expose :
| Propriété | Type | Description |
|---|---|---|
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}")Parcours avec DocumentVisitor
DocumentVisitor fournit un modèle de visiteur pour le parcours structuré du document complet. Surchargez n’importe quel VisitXxxStart / VisitXxxEnd méthode pour intercepter des types de nœuds spécifiques :
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}")Exportation PDF
Enregistrez un document chargé au format PDF en utilisant Document.Save(). Pris en charge via le backend optionnel ReportLab.
from aspose.note import Document, SaveFormat
doc = Document("notebook.one")
doc.Save("output.pdf", SaveFormat.Pdf)PdfSaveOptions
| Option | Type | Description |
|---|---|---|
PageIndex | int | Le champ existe ; non transmis à l’exportateur PDF dans v26.3.1 (n’a aucun effet) |
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()Référence des formats et des énumérations
SaveFormat
| Valeur | Statut |
|---|---|
SaveFormat.Pdf | Implémenté (nécessite ReportLab) |
FileFormat
Document.FileFormat fournit une indication approximative de la version du format de fichier OneNote. L’énumération déclare trois valeurs :
| Valeur | Description |
|---|---|
FileFormat.OneNote2010 | Format OneNote 2010 |
FileFormat.OneNoteOnline | Format OneNote Online |
FileFormat.OneNote2007 | Format 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
Limitations actuelles
| Limitation | Détail |
|---|---|
| Lecture seule | Écriture vers .one le format n’est pas implémenté |
| Pas de chiffrement | Les documents chiffrés provoquent IncorrectPasswordException |
| PDF uniquement pour l’exportation | Autre SaveFormat les valeurs provoquent UnsupportedSaveFormatException |
| ReportLab requis pour le PDF | Installer pip install "aspose-note[pdf]" séparément |
GetPageHistory renvoie une liste à un seul élément | Le parcours complet de l’historique de la page est un stub ; renvoie [page] |
DetectLayoutChanges() | Stub de compatibilité ; aucune opération |
Conseils et bonnes pratiques
- Vérifier None:
Page.Title,Title.TitleText,OutlineElement.NumberList, et la plupart des champs de métadonnées peuvent êtreNone. Toujours protéger avecif x is not Noneouif xavant d’accéder aux propriétés. - Utiliser
GetChildNodes(Type)pour une recherche récursive plutôt que d’itérer manuellement l’arbre. Elle parcourt tout le sous‑arbre. - Itérer les enfants directs avec
for child in nodelorsque vous n’avez besoin que des enfants immédiats. - Gérer l’encodage sous Windows: Sous Windows,
sys.stdoutpeut utiliser une page de code héritée. Ajoutezsys.stdout.reconfigure(encoding="utf-8", errors="replace")au démarrage lors de l’impression de texte Unicode. - Installer
[pdf]supplémentaire: Ne pas importerSaveFormat.Pdfde fonctionnalité sans l’installer au préalablepip install "aspose-note[pdf]". Sans ReportLab, l’enregistrement au format PDF déclenchera une erreur d’importation à l’exécution.