Com exportar un fitxer OneNote a PDF amb Python
Aspose.Note FOSS per a Python permet l’exportació programàtica a PDF de fitxers de secció de Microsoft OneNote .one sense requerir Microsoft Office ni cap convertidor de documents a nivell del sistema operatiu. L’exportació es gestiona mitjançant el mètode Document.Save() suportat pel renderitzador PDF opcional ReportLab.
Beneficis
- Server-friendly: s’executa en qualsevol SO, inclosos servidors Linux sense cap interfície i contenidors CI/CD
- Stream-capable: desa directament a un buffer
io.BytesIO, sense necessitat de fitxer temporal - Free and open-source: llicència MIT
Requisits previs
L’exportació a PDF requereix la dependència opcional ReportLab. Instal·la-la mitjançant l’extensió [pdf]:
pip install "aspose-note[pdf]"Si ja tens aspose-note instal·lat sense l’extra:
pip install --upgrade "aspose-note[pdf]"Verifiqueu que ReportLab estigui disponible:
python -c "import reportlab; print(reportlab.Version)"Guia pas a pas
Pas 1: Instal·la aspose-note amb suport PDF
pip install "aspose-note[pdf]"Confirma la instal·lació:
from aspose.note import Document, SaveFormat
print("Ready for PDF export.")Pas 2: Carrega el fitxer OneNote
from aspose.note import Document
doc = Document("MyNotes.one")Pas 3: Exporta tot el document a PDF
L’exportació més senzilla, cobrint totes les pàgines amb la configuració predeterminada:
from aspose.note import Document, SaveFormat
doc = Document("MyNotes.one")
doc.Save("output.pdf", SaveFormat.Pdf)
print("PDF saved to output.pdf")Pas 4: Utilitza PdfSaveOptions
PdfSaveOptions et permet configurar els paràmetres d’exportació PDF:
from aspose.note import Document
from aspose.note.saving import PdfSaveOptions
doc = Document("MyNotes.one")
opts = PdfSaveOptions()
doc.Save("output.pdf", opts)Opcions PdfSaveOptions disponibles
| Option | Type | Default | Description |
|---|---|---|---|
PageIndex | int | 0 | El camp existeix; no s’envia al exportador PDF a la versió v26.3.1: no té cap efecte |
PageCount | int | None | None | El camp existeix; no s’envia al exportador PDF a la versió v26.3.1: no té cap efecte |
Pas 5: Exporta a un flux en memòria
Document.Save() accepta directament un flux binari: no cal cap fitxer temporal:
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")Pas 6: Exportació per lots de diversos fitxers
Processa tots els fitxers .one d’un directori:
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}")Problemes comuns i solucions
1. ImportError: No module named ‘reportlab’
Cause: L’extra [pdf] no estava instal·lat.
Correcció:
pip install "aspose-note[pdf]"2. UnsupportedSaveFormatException
Causa: S’ha utilitzat un format diferent de SaveFormat.Pdf. Només s’ha implementat SaveFormat.Pdf.
Correcció: Utilitzeu sempre SaveFormat.Pdf per a l’exportació. Altres formats es declaren per compatibilitat d’API però generen UnsupportedSaveFormatException.
3. IncorrectPasswordException
Causa: El fitxer .one està encriptat. No s’admeten documents encriptats.
Fix: Utilitzeu un fitxer .one sense xifrar. El producte comercial Aspose.Note admet xifrat.
4. FileNotFoundError
Causa: El camí del fitxer d’entrada .one és incorrecte.
Correcció: Utilitzeu pathlib.Path.exists() per validar abans de carregar:
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. El PDF de sortida és en blanc o buit
Cause: El fitxer .one conté pàgines però cap contingut de text (només imatges o taules sense text). El renderitzador PDF produeix pàgines basant-se en el que ReportLab pot renderitzar del DOM.
Correcció: Verifiqueu el contingut de la pàgina abans d’exportar:
from aspose.note import Document, RichText
doc = Document("MyNotes.one")
text_count = len(doc.GetChildNodes(RichText))
print(f"RichText nodes found: {text_count}")Preguntes freqüents
Quins formats de desament són compatibles?
Només SaveFormat.Pdf està implementat actualment. L’enumeració SaveFormat té exactament un membre: SaveFormat.Pdf.
Puc exportar a un flux en lloc d’un fitxer?
Sí. Document.Save() accepta qualsevol flux binari gravable com a primer 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’exportació conserva l’ordre de les pàgines?
Sí. Les pàgines s’exporten en el mateix ordre en què apareixen al DOM (l’ordre retornat en iterar el Document).
L’exportació a PDF està disponible a Linux?
Sí. ReportLab i Aspose.Note FOSS per a Python són ambdós independents del SO.
Puc exportar un subconjunt de pàgines?
PdfSaveOptions.PageIndex i PageCount existeixen però no s’envien a l’exportador PDF a la versió v26.3.1 i no tenen cap efecte: tot el document s’exporta sempre.
Recursos relacionats: