Come esportare un file OneNote in PDF con Python

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

  1. Compatibile con i server: funziona su qualsiasi OS, inclusi server Linux senza interfaccia grafica e contenitori CI/CD
  2. Capace di streaming: salva direttamente in un buffer io.BytesIO, senza necessità di file temporanei
  3. 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

OptionTypeDefaultDescription
PageIndexint0Il campo esiste; non inoltrato all’esportatore PDF in v26.3.1: non ha effetto
PageCountint | NoneNoneIl 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:

 Italiano