Come esportare un file OneNote in PDF con Python
Aspose.Note FOSS per Python consente l’esportazione programmatica in PDF dei file di sezione Microsoft OneNote .one senza richiedere Microsoft Office o alcun convertitore di documenti a livello di sistema operativo. L’esportazione è gestita dal metodo Document.Save() supportato dal renderer PDF opzionale ReportLab.
Benefici
- Compatibile con i server: funziona su qualsiasi OS, inclusi server Linux senza interfaccia grafica e contenitori CI/CD
- Capace di streaming: salva direttamente in un buffer
io.BytesIO, senza necessità di file temporanei - Gratuito e open source: licenza MIT
Prerequisiti
L’esportazione PDF richiede la dipendenza opzionale ReportLab. Installala tramite l’extra [pdf]:
pip install "aspose-note[pdf]"Se hai già aspose-note installato senza l’extra:
pip install --upgrade "aspose-note[pdf]"Verifica che ReportLab sia disponibile:
python -c "import reportlab; print(reportlab.Version)"Guida passo-passo
Passo 1: Installa aspose-note con supporto PDF
pip install "aspose-note[pdf]"Conferma l’installazione:
from aspose.note import Document, SaveFormat
print("Ready for PDF export.")Passo 2: Carica il file OneNote
from aspose.note import Document
doc = Document("MyNotes.one")Passo 3: Esporta l’intero documento in PDF
L’esportazione più semplice, che copre tutte le pagine con le impostazioni predefinite:
from aspose.note import Document, SaveFormat
doc = Document("MyNotes.one")
doc.Save("output.pdf", SaveFormat.Pdf)
print("PDF saved to output.pdf")Passo 4: Usa PdfSaveOptions
PdfSaveOptions ti consente di configurare le impostazioni di esportazione PDF:
from aspose.note import Document
from aspose.note.saving import PdfSaveOptions
doc = Document("MyNotes.one")
opts = PdfSaveOptions()
doc.Save("output.pdf", opts)Opzioni PdfSaveOptions disponibili
| Option | Type | Default | Description |
|---|---|---|---|
PageIndex | int | 0 | Il campo esiste; non inoltrato all’esportatore PDF in v26.3.1: non ha effetto |
PageCount | int | None | None | Il campo esiste; non inoltrato all’esportatore PDF in v26.3.1: non ha effetto |
Passo 5: Esporta in uno stream in memoria
Document.Save() accetta direttamente un flusso binario: non è necessario alcun file temporaneo:
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")Passo 6: Esportazione batch di più file
Elabora tutti i file .one in una directory:
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}")Problemi comuni e soluzioni
1. ImportError: No module named ‘reportlab’
Cause: L’extra [pdf] non è stato installato.
Correzione:
pip install "aspose-note[pdf]"2. UnsupportedSaveFormatException
Cause: Un formato diverso da SaveFormat.Pdf è stato utilizzato. È implementato solo SaveFormat.Pdf.
Correzione: Usa sempre SaveFormat.Pdf per l’esportazione. Altri formati sono dichiarati per compatibilità API ma generano UnsupportedSaveFormatException.
3. IncorrectPasswordException
Causa: Il file .one è crittografato. I documenti crittografati non sono supportati.
Fix: Usa un file non crittografato .one. Il prodotto commerciale Aspose.Note supporta la crittografia.
4. FileNotFoundError
Causa: Il percorso del file di input .one è errato.
Correzione: Usa pathlib.Path.exists() per convalidare prima del caricamento:
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. Il PDF di output è vuoto o privo di contenuti
Causa: Il file .one contiene pagine ma nessun contenuto testuale (solo immagini o tabelle senza testo). Il renderer PDF genera pagine in base a ciò che ReportLab può renderizzare dal DOM.
Correzione: Verifica il contenuto della pagina prima di esportare:
from aspose.note import Document, RichText
doc = Document("MyNotes.one")
text_count = len(doc.GetChildNodes(RichText))
print(f"RichText nodes found: {text_count}")Domande Frequenti
Quali formati di salvataggio sono supportati?
Solo SaveFormat.Pdf è attualmente implementato. L’enum SaveFormat ha esattamente un membro: SaveFormat.Pdf.
Posso esportare in uno stream anziché in un file?
Sì. Document.Save() accetta qualsiasi flusso binario scrivibile come primo argomento:
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’esportazione preserva l’ordine delle pagine?
Sì. Le pagine vengono esportate nello stesso ordine in cui appaiono nel DOM (l’ordine restituito iterando il Document).
L’esportazione PDF è disponibile su Linux?
Sì. ReportLab e Aspose.Note FOSS per Python sono entrambi indipendenti dal sistema operativo.
Posso esportare un sottoinsieme di pagine?
PdfSaveOptions.PageIndex e PageCount esistono ma non vengono inoltrati all’esportatore PDF in v26.3.1 e non hanno alcun effetto: l’intero documento viene sempre esportato.
Risorse correlate: