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-note

Pour 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.FileFormat fournit 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.LoadHistory flag 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; expose DisplayName, CreationTime, FileFormat
  • Page: enfant direct de Document; expose Title, Author, CreationTime, LastModifiedTime, Level
  • Title:expose TitleText, TitleDate, TitleTime (tout RichText nœuds)
  • Outline: conteneur positionnel avec HorizontalOffset, VerticalOffset, MaxWidth, MaxHeight, MinWidth, ReservedWidth, IndentPosition
  • OutlineElement: conteneur feuille ; expose NumberList

Méthodes de navigation sur CompositeNode:

Méthode / PropriétéDescription
FirstChild, LastChildAccè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 nodeIté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ète
  • TextRuns: list[TextRun]: liste de segments formatés
  • Tags: list[NoteTag]: balises OneNote attachées à ce bloc
  • Append(text, style=None): ajouter un segment de texte en mémoire
  • Replace(old_value, new_value): substitution de chaîne en mémoire

Chaque TextRun contient :

PropriétéTypeDescription
TextstrTexte du segment
StyleTextStyleMétadonnées de formatage

TextStyle propriétés :

PropriétéType
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}")

Extraction d’images

Image les nœuds exposent les octets bruts et les métadonnées pour chaque image intégrée :

PropriétéTypeDescription
FileName`strNone`
BytesbytesDonnées d’image brutes
Width, Height`floatNone`
AlternativeTextTitle`strNone`
AlternativeTextDescription`strNone`
HyperlinkUrl`strNone`
Tagslist[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éTypeDescription
FileName`strNone`
BytesbytesDonnées brutes du fichier
Tagslist[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 :

ClassePropriétés clés
TableColumns: list[TableColumn] (chaque TableColumn a .Width et .LockedWidth), IsBordersVisible: bool, Tags: list[NoteTag]
TableRowItérer les cellules via GetChildNodes(TableCell)
TableCellContient 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éTypeDescription
Icon`intNone`
Label`strNone`
FontColor`intNone`
Highlight`intNone`
CreationTime`datetimeNone`
CompletedTime`datetimeNone`

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

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

OptionTypeDescription
PageIndexintLe champ existe ; non transmis à l’exportateur PDF dans v26.3.1 (n’a aucun effet)
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()

Référence des formats et des énumérations

SaveFormat

ValeurStatut
SaveFormat.PdfImplé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 :

ValeurDescription
FileFormat.OneNote2010Format OneNote 2010
FileFormat.OneNoteOnlineFormat OneNote Online
FileFormat.OneNote2007Format 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

LimitationDétail
Lecture seuleÉcriture vers .one le format n’est pas implémenté
Pas de chiffrementLes documents chiffrés provoquent IncorrectPasswordException
PDF uniquement pour l’exportationAutre SaveFormat les valeurs provoquent UnsupportedSaveFormatException
ReportLab requis pour le PDFInstaller pip install "aspose-note[pdf]" séparément
GetPageHistory renvoie une liste à un seul élémentLe 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 être None. Toujours protéger avec if x is not None ou if x avant 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 node lorsque vous n’avez besoin que des enfants immédiats.
  • Gérer l’encodage sous Windows: Sous Windows, sys.stdout peut utiliser une page de code héritée. Ajoutez sys.stdout.reconfigure(encoding="utf-8", errors="replace") au démarrage lors de l’impression de texte Unicode.
  • Installer [pdf] supplémentaire: Ne pas importer SaveFormat.Pdf de fonctionnalité sans l’installer au préalable pip install "aspose-note[pdf]". Sans ReportLab, l’enregistrement au format PDF déclenchera une erreur d’importation à l’exécution.
 Français