Comment exporter un fichier OneNote en PDF avec Python
Aspose.Note FOSS for Python permet l’exportation PDF programmatique des fichiers de sections Microsoft OneNote .one sans nécessiter Microsoft Office ou tout convertisseur de documents au niveau du système d’exploitation. L’exportation est gérée par la méthode Document.Save() soutenue par le rendu PDF optionnel ReportLab.
Avantages
- Server-friendly : s’exécute sur n’importe quel OS, y compris les serveurs Linux sans interface graphique et les conteneurs CI/CD
- Stream-capable : enregistrez directement dans un tampon
io.BytesIO, aucun fichier temporaire n’est nécessaire - Free and open-source : licence MIT
Prérequis
L’exportation PDF nécessite la dépendance optionnelle ReportLab. Installez‑la via l’extra [pdf] :
pip install "aspose-note[pdf]"Si vous avez déjà aspose-note installé sans l’extra :
pip install --upgrade "aspose-note[pdf]"Vérifiez que ReportLab est disponible :
python -c "import reportlab; print(reportlab.Version)"Guide étape par étape
Étape 1 : Installer aspose-note avec la prise en charge du PDF
pip install "aspose-note[pdf]"Confirmez l’installation :
from aspose.note import Document, SaveFormat
print("Ready for PDF export.")Étape 2 : charger le fichier OneNote
from aspose.note import Document
doc = Document("MyNotes.one")Étape 3 : Exporter le document complet au format PDF
L’exportation la plus simple, couvrant toutes les pages avec les paramètres par défaut :
from aspose.note import Document, SaveFormat
doc = Document("MyNotes.one")
doc.Save("output.pdf", SaveFormat.Pdf)
print("PDF saved to output.pdf")Étape 4 : Utiliser PdfSaveOptions
PdfSaveOptions vous permet de configurer les paramètres d’exportation PDF :
from aspose.note import Document
from aspose.note.saving import PdfSaveOptions
doc = Document("MyNotes.one")
opts = PdfSaveOptions()
doc.Save("output.pdf", opts)Options PdfSaveOptions disponibles
| Option | Type | Default | Description |
|---|---|---|---|
PageIndex | int | 0 | Le champ existe ; non transmis à l’exportateur PDF dans v26.3.1 : n’a aucun effet |
PageCount | int | None | None | Le champ existe ; non transmis à l’exportateur PDF dans v26.3.1 : n’a aucun effet |
Étape 5 : Exporter vers un flux en mémoire
Document.Save() accepte un flux binaire directement : aucun fichier temporaire nécessaire :
import io
from aspose.note import Document, SaveFormat
from aspose.note.saving import PdfSaveOptions
doc = Document("MyNotes.one")
buf = io.BytesIO()
doc.Save(buf, PdfSaveOptions())
pdf_bytes = buf.getvalue()
print(f"PDF size: {len(pdf_bytes)} bytes")Étape 6 : Exportation groupée de plusieurs fichiers
Traitez tous les fichiers .one dans un répertoire :
from pathlib import Path
from aspose.note import Document, SaveFormat
input_dir = Path("./onenote_files")
output_dir = Path("./pdf_output")
output_dir.mkdir(exist_ok=True)
for one_file in input_dir.glob("*.one"):
doc = Document(str(one_file))
out_path = output_dir / one_file.with_suffix(".pdf").name
doc.Save(str(out_path), SaveFormat.Pdf)
print(f"Exported: {one_file.name} -> {out_path.name}")Problèmes courants et solutions
1. ImportError: Aucun module nommé ‘reportlab’
Cause: L’extra [pdf] n’a pas été installé.
Correction:
pip install "aspose-note[pdf]"2. UnsupportedSaveFormatException
Cause : Un format autre que SaveFormat.Pdf a été utilisé. Seul SaveFormat.Pdf est implémenté.
Correction: Utilisez toujours SaveFormat.Pdf pour l’exportation. D’autres formats sont déclarés pour la compatibilité de l’API mais déclenchent UnsupportedSaveFormatException.
3. IncorrectPasswordException
Cause: Le fichier .one est chiffré. Les documents chiffrés ne sont pas pris en charge.
Correction : Utilisez un fichier .one non chiffré. Le produit commercial Aspose.Note prend en charge le chiffrement.
4. FileNotFoundError
Cause: Le chemin du fichier d’entrée .one est incorrect.
Correction : Utilisez pathlib.Path.exists() pour valider avant le chargement :
from pathlib import Path
from aspose.note import Document, SaveFormat
path = Path("MyNotes.one")
assert path.exists(), f"File not found: {path.resolve()}"
doc = Document(str(path))
doc.Save("output.pdf", SaveFormat.Pdf)5. Le PDF de sortie est blanc ou vide
Cause : Le fichier .one contient des pages mais aucun contenu texte (seulement des images ou des tableaux sans texte). Le rendu PDF produit des pages en fonction de ce que ReportLab peut rendre à partir du DOM.
Correction: Vérifier le contenu de la page avant l’exportation :
from aspose.note import Document, RichText
doc = Document("MyNotes.one")
text_count = len(doc.GetChildNodes(RichText))
print(f"RichText nodes found: {text_count}")Foire aux questions
Quels formats d’enregistrement sont pris en charge ?
Seul SaveFormat.Pdf est actuellement implémenté. L’énumération SaveFormat possède exactement un membre : SaveFormat.Pdf.
Puis-je exporter vers un flux au lieu d’un fichier ?
Oui. Document.Save() accepte tout flux binaire inscriptible comme son premier argument :
import io
from aspose.note import Document, PdfSaveOptions, SaveFormat
doc = Document("MyNotes.one")
buf = io.BytesIO()
doc.Save(buf, PdfSaveOptions())
pdf_bytes = buf.getvalue()L’exportation préserve-t-elle l’ordre des pages ?
Oui. Les pages sont exportées dans le même ordre qu’elles apparaissent dans le DOM (l’ordre renvoyé lors de l’itération du Document).
L’exportation PDF est‑elle disponible sous Linux ?
Oui. ReportLab et Aspose.Note FOSS for Python sont tous deux indépendants du système d’exploitation.
Puis-je exporter un sous‑ensemble de pages ?
PdfSaveOptions.PageIndex et PageCount existent mais ne sont pas transmis à l’exportateur PDF dans la version v26.3.1 et n’ont aucun effet : le document entier est toujours exporté.
Ressources associées :