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é | Type | Défaut | Description |
|---|---|---|---|
LoadHistory | bool | False | Quand True,Les révisions de l’historique de la page sont inclus dans le DOM et accessibles via Document.GetPageHistory |
DocumentPassword | `str | None` | 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 Valeur | Description |
|---|---|
OneNote2010 | Standard .one fichier écrit par OneNote 2010 et ultérieurement |
OneNoteOnline | .one fichier écrit par OneNote Online / Microsoft 365 |
OneNote2007 | héritage .one Formats de OneNote 2007 |
Unknown | Le 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é | Type | Description |
|---|---|---|
Title | `Title | None` |
Author | `str | None` |
CreationTime | `datetime | None` |
LastModifiedTime | `datetime | None` |
Level | `int | None` |
IsConflictPage | bool | True 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
└── AttachedFileLes méthodes de traversée clés héritées de CompositeNode:
| méthode | Description |
|---|---|
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:
GetPageHistoryRetourner un videPageHistoryObjets quandLoadHistoryestFalse(le défaut) toujours définieopts.LoadHistory = Trueavant 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:
Documentcharge tout le monde.oneFaites-nous des fichiers dans la mémoire La construction, garde unDocumentInstance et appelGetChildNodeset 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=Truelorsque 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
.onefichiers pour éviter de garder le fichier ouvert après la partie est remplie. - Appel à
DetectLayoutChangesAvantSave:• Lorsque vous créez un document programmable et en appuyant les nodes, appelDetectLayoutChanges()Pour assurer que les coordonnées de mise en place sont consistent avant l’exportation en PDF.
Les problèmes communs
| Problème | Cause | Fixé |
|---|---|---|
IncorrectPasswordException sur le chargement | Les fichiers sont cryptés ; les documents chiffrés ne sont pas supportés | Obtenir une copie non cryptée du fichier |
FileCorruptedException sur le chargement | Le 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 Save | Essayé de sauvegarder dans un format autre que PDF | Seul le format PDF est supporté pour l’exportation. |
vide GetPageHistory Résultat | LoadOptions.LoadHistory n’a pas été fixée à True Avant le chargement | Récupérer le document avec opts.LoadHistory = True |
ModuleNotFoundError: reportlab | PDF exporté essayé sans le PDF extra | courir 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éthodes | Description |
|---|---|
Document(path_or_stream, options?) | Charger A .one Faites un fichier ou créez un document vide |
Document.FileFormat | La 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.LoadHistory | Sette à True Pour inclure les révisions de page dans le DOM |
LoadOptions.DocumentPassword | Réservé ; fichier crypté IncorrectPasswordException |
FileFormat | Enum : OneNote2010, OneNoteOnline, OneNote2007, Unknown |
SaveFormat.Pdf | Le seul format d’exportation soutenu; augmenter ValueError Pour d’autres formats |
PageHistory.Count | Nombre de pages disponibles |
Page.Level | Départ de la sous-page (1 = niveau supérieur) |
Page.IsConflictPage | True Pour synchroniser les copies de conflit |
Voir aussi
- Extraction de texte: extraire le texte plain et les courses formées
- PDF Exportation: options d’exportation, sélection de page et sortie de courant
- Images et attachements: extraire des images intégrées et les fichiers joints
- Tableau: structure de table parsing et contenu cellulaire
- Étiquette : API : Document
- Aspose.Note — Enterprise Documentation