Travailler avec le document de note

Ce guide explique comment charger, traverser et exporter Microsoft OneNote .one Les fichiers en Python utilisant le Document Les écoles de l’Aspose.Note FOSS.The Document La classe est la racine du modèle d’objet de document (DOM), et chaque lecture, traverse ou exporte commence par un Document Un seul exemple qui représente un .one Le fichier de section.


Télécharger un document

Charger depuis un chemin de fichier

Passez la route vers un .one Faites directement à la Document Constructeur :

from aspose.note import Document

doc = Document("MyNotes.one")

Charger depuis un flux binaire

Utilisez un objet de fichier lorsque les données proviennent d’une réponse réseau, d’un bloc de stockage dans le cloud ou d ́un buffer en mémoire :

from pathlib import Path
from aspose.note import Document

with Path("MyNotes.one").open("rb") as f:
    doc = Document(f)

Créer un document vide

Construire A Document sans aucune raison de créer un nouveau document OneNote programmé :

from aspose.note import Document, Page

doc = Document()
doc.AppendChildLast(Page())

Charger avec des options

Utiliser LoadOptions Pour définir des paramètres facultatifs tels que l’historique de chargement au moment de la construction :

from aspose.note import Document, LoadOptions

opts = LoadOptions()
opts.LoadHistory = True   # include page revision history in the DOM
doc = Document("MyNotes.one", opts)
LoadOptions PropriétéTypeDéfautDescription
LoadHistoryboolFalseQuand True,Les révisions de l’historique de la page sont inclus dans le DOM et accessibles via Document.GetPageHistory
DocumentPassword`strNone`None

Document de détection

Le FileFormat La propriété identifie le format de OneNote variable que le fichier utilise :

from aspose.note import Document, FileFormat

doc = Document("MyNotes.one")

if doc.FileFormat == FileFormat.OneNote2010:
    print("OneNote 2010 format")
elif doc.FileFormat == FileFormat.OneNoteOnline:
    print("OneNote Online format")
elif doc.FileFormat == FileFormat.OneNote2007:
    print("OneNote 2007 format")
else:
    print("Format:", doc.FileFormat)
FileFormat ValeurDescription
OneNote2010Standard .one fichier écrit par OneNote 2010 et ultérieurement
OneNoteOnline.one fichier écrit par OneNote Online / Microsoft 365
OneNote2007héritage .one Formats de OneNote 2007
UnknownLe format ne peut pas être identifié.

Itération des pages

Les pages sont les enfants directs de la Document.Utilisez A for Pour une simple itération :

from aspose.note import Document

doc = Document("MyNotes.one")

for page in doc:
    title_text = (
        page.Title.TitleText.Text
        if page.Title and page.Title.TitleText
        else "(untitled)"
    )
    author = page.Author or "(unknown)"
    level = page.Level or 1
    indent = "  " * (level - 1)
    print(f"{indent}{title_text}  [by {author}]")

Utiliser GetChildNodes(Page) Pour obtenir une liste de toutes les pages à la fois :

from aspose.note import Document, Page

doc = Document("MyNotes.one")
pages = doc.GetChildNodes(Page)
print(f"Total pages: {len(pages)}")

Méthodatifs Page

PropriétéTypeDescription
Title`TitleNone`
Author`strNone`
CreationTime`datetimeNone`
LastModifiedTime`datetimeNone`
Level`intNone`
IsConflictPageboolTrue Si la page est une copie de conflit synchronisé

Traverser l’arbre du document

Document hérité de CompositeNode,En ce qui concerne les méthodes de traversée d’arbre :

from aspose.note import Document, RichText

doc = Document("MyNotes.one")

# Extract all plain text from the entire document
all_text = [rt.Text for rt in doc.GetChildNodes(RichText) if rt.Text]
print("\n".join(all_text))

La hiérarchie de la DOM :

Document
  └── Page (0..n)
        ├── Title
        │     ├── TitleText (RichText)
        │     ├── TitleDate (RichText)
        │     └── TitleTime (RichText)
        └── Outline (0..n)
              └── OutlineElement (0..n)
                    ├── RichText
                    ├── Image
                    ├── Table
                    │     └── TableRow → TableCell → RichText / Image
                    └── AttachedFile

Les méthodes de traversée clés héritées de CompositeNode:

méthodeDescription
GetChildNodes(NodeType)Retourner une liste typée de tous les descendants correspondant au type donné
AppendChildLast(node)Ajouter un node enfant à la fin de la liste des enfants
AppendChildFirst(node)Ajoutez un noyau pour enfant au début
InsertChild(index, node)Insérer un enfant dans un indice spécifique
RemoveChild(node)Réserver un noyau enfant
GetEnumerator()- les enfants direct

Page Histoire

Lorsque vous êtes chargé avec LoadHistory=True, Document.GetPageHistory Retourner toutes les révisions sauvées Une page, commandée du plus ancien au plus récent :

from aspose.note import Document, LoadOptions

opts = LoadOptions()
opts.LoadHistory = True
doc = Document("MyNotes.one")

for page in doc.GetChildNodes(None.__class__.__mro__[0]):  # iterate pages
    pass

# Get revisions for a specific page
import aspose.note as an

doc2 = Document("MyNotes.one", opts)
pages = doc2.GetChildNodes(an.Page)
if pages:
    history = doc2.GetPageHistory(pages[0])
    print(f"Revision count: {history.Count}")
    for rev in history:
        print(f"  Modified: {rev.LastModifiedTime}")

Note: GetPageHistory Retourner un vide PageHistory Objets quand LoadHistory est False (le défaut) toujours définie opts.LoadHistory = True avant de charger si vous avez besoin Les données de révision.


Économiser et exporter

Utiliser Document.Save PDF est le seul format d’exportation supporté.

Sauver dans un fichier

Appel à Document.Save() Avec un fichier et SaveFormat.Pdf Pour écrire l’exportation directement sur le disque :

from aspose.note import Document, SaveFormat

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

Économisez dans un flux in-mémory

Passez un écriture io.BytesIO buffer au lieu d’un chemin pour capturer les bytes PDF dans la mémoire:

import io
from aspose.note import Document, SaveFormat

doc = Document("MyNotes.one")
buf = io.BytesIO()
doc.Save(buf, SaveFormat.Pdf)
pdf_bytes = buf.getvalue()

Économiser avec les options

Utiliser PdfSaveOptions de aspose.note.saving Pour vérifier quelles pages sont inclus dans la sortie PDF exportée :

import io
from aspose.note import Document
from aspose.note.saving import PdfSaveOptions

doc = Document("MyNotes.one")

# Export pages 2 and 3 only (zero-based index)
opts = PdfSaveOptions(PageIndex=1, PageCount=2)
buf = io.BytesIO()
doc.Save(buf, opts)
pdf_bytes = buf.getvalue()

Important: L’exportation de PDF nécessite la dépendance ReportLab facultative. Installation avec pip install "aspose-note[pdf]".


Détecter les changements de layout

Appel à DetectLayoutChanges Après avoir modifié le document pour récalculer les métrics de layout Avant de faire des économies :

from aspose.note import Document, Page

doc = Document()
page = Page()
doc.AppendChildLast(page)

# ... add content to page ...

doc.DetectLayoutChanges()
doc.Save("output.pdf")

Conseils et meilleures pratiques

  • Une fois, plusieurs fois et une fois: Document charge tout le monde .one Faites-nous des fichiers dans la mémoire La construction, garde un Document Instance et appel GetChildNodes et plus souvent plutôt que Récupérer le fichier pour chaque requête.
  • Vérifier IsConflictPage: Synchronisation OneNote peut produire des pages de conflit. Filtre avec [p for p in doc if not p.IsConflictPage] avant le traitement du contenu.
  • Utiliser LoadHistory=False (defaut) pour la vitesse: L’historique de la page ajoute une mémoire significative et - Le détour : Seulement fixé LoadHistory=True lorsque vous avez expressément besoin de données de révision.
  • Stream pour les fichiers grands:Passez un objet de fichier ouvert au lieu d’une ligne de route lors de la lecture grand grand .one fichiers pour éviter de garder le fichier ouvert après la partie est remplie.
  • Appel à DetectLayoutChanges Avant Save:• Lorsque vous créez un document programmable et en appuyant les nodes, appel DetectLayoutChanges() Pour assurer que les coordonnées de mise en place sont consistent avant l’exportation en PDF.

Les problèmes communs

ProblèmeCauseFixé
IncorrectPasswordException sur le chargementLes fichiers sont cryptés ; les documents chiffrés ne sont pas supportésObtenir une copie non cryptée du fichier
FileCorruptedException sur le chargementLe fichier est troncé ou a un format interne non supporté.Vérifier que le fichier est valide .one La section (pas une) .onetoc2 Tableau des contenus)
UnsupportedSaveFormatException sur SaveEssayé de sauvegarder dans un format autre que PDFSeul le format PDF est supporté pour l’exportation.
vide GetPageHistory RésultatLoadOptions.LoadHistory n’a pas été fixée à True Avant le chargementRécupérer le document avec opts.LoadHistory = True
ModuleNotFoundError: reportlabPDF exporté essayé sans le PDF extracourir pip install "aspose-note[pdf]"

FAQ

Quels formats OneNote peut lire Aspose.Notes ?

Les trois formats de la section OneNote : OneNote2007, OneNote2010,et OneNoteOnline. Utiliser doc.FileFormat Pour déterminer quelle variante a été chargée.

Je peux réécrire à un .one Fiche après la lecture ?

Aspose.Note for Python is a read-and-export library. Use Document.Save Le format binaire OneNote est lu uniquement dans cette édition FOSS.

Comment puis-je lire une page par titre ?

Iterez les pages avec une expression de générateur et comparez la propriété du texte de titre à votre ligne cible:

from aspose.note import Document

doc = Document("MyNotes.one")
target = next(
    (p for p in doc
     if p.Title and p.Title.TitleText and p.Title.TitleText.Text == "My Page"),
    None,
)

Comment puis-je compter les sous-pages séparément des pages de haut niveau ?

Utiliser page.Level:Le niveau 1 est le niveau supérieur, le degré 2 est une sous-page et ainsi de suite.

from aspose.note import Document

doc = Document("MyNotes.one")
top_level = [p for p in doc if (p.Level or 1) == 1]
sub_pages  = [p for p in doc if (p.Level or 1) > 1]
print(f"Top-level: {len(top_level)}, Sub-pages: {len(sub_pages)}")

Le support de l’Aspose.Note .onetoc2 Les fichiers de contenu ?

Non seulement .one Les fichiers de section sont soutenus. .onetoc2 Les notes augmenteront FileCorruptedException.


Le résumé de référence API

Classes / MéthodesDescription
Document(path_or_stream, options?)Charger A .one Faites un fichier ou créez un document vide
Document.FileFormatLa variante de la version (FileFormat Enum)
Document.GetChildNodes(NodeType)Retraire tous les nodes descendants d’un type donné
Document.GetPageHistory(page)Obtenez l’historique de révision pour une page (requis) LoadHistory=True)
Document.Save(target, format_or_options)Exporter en PDF par voie de fichier ou flux
Document.DetectLayoutChanges()Réévaluation des métrics de layout après les éditions programmatiques
Document.Accept(visitor)Rendez-vous sur le DOM en utilisant un DocumentVisitor sous-classes
LoadOptions.LoadHistorySette à True Pour inclure les révisions de page dans le DOM
LoadOptions.DocumentPasswordRéservé ; fichier crypté IncorrectPasswordException
FileFormatEnum : OneNote2010, OneNoteOnline, OneNote2007, Unknown
SaveFormat.PdfLe seul format d’exportation soutenu; augmenter ValueError Pour d’autres formats
PageHistory.CountNombre de pages disponibles
Page.LevelDépart de la sous-page (1 = niveau supérieur)
Page.IsConflictPageTrue Pour synchroniser les copies de conflit

Voir aussi

 Français