Com exportar un fitxer OneNote a PDF amb Python

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

  1. Server-friendly: s’executa en qualsevol SO, inclosos servidors Linux sense cap interfície i contenidors CI/CD
  2. Stream-capable: desa directament a un buffer io.BytesIO, sense necessitat de fitxer temporal
  3. 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

OptionTypeDefaultDescription
PageIndexint0El camp existeix; no s’envia al exportador PDF a la versió v26.3.1: no té cap efecte
PageCountint | NoneNoneEl 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:

 Català