Cómo exportar un archivo OneNote a PDF en Python

Cómo exportar un archivo OneNote a PDF en Python

Aspose.Note FOSS for Python permite la exportación programática a PDF de archivos de sección de Microsoft OneNote .one sin requerir Microsoft Office ni ningún conversor de documentos a nivel del sistema operativo. La exportación se maneja mediante el método Document.Save() respaldado por el renderizador PDF opcional ReportLab.

Beneficios

  1. Amigable con servidores: se ejecuta en cualquier SO, incluidos servidores Linux sin interfaz gráfica y contenedores CI/CD
  2. Capaz de transmisión: guarda directamente en un búfer io.BytesIO, sin necesidad de archivo temporal
  3. Libre y de código abierto: licencia MIT

Requisitos

La exportación a PDF requiere la dependencia opcional ReportLab. Instálala mediante el extra [pdf]:

pip install "aspose-note[pdf]"

Si ya tienes aspose-note instalado sin el extra:

pip install --upgrade "aspose-note[pdf]"

Verifique que ReportLab esté disponible:

python -c "import reportlab; print(reportlab.Version)"

Guía paso a paso

Paso 1: Instalar aspose-note con soporte PDF

pip install "aspose-note[pdf]"

Confirme la instalación:

from aspose.note import Document, SaveFormat
print("Ready for PDF export.")

Paso 2: Cargar el archivo OneNote

from aspose.note import Document

doc = Document("MyNotes.one")

Paso 3: Exportar todo el documento a PDF

La exportación más simple, cubriendo todas las páginas con la configuración predeterminada:

from aspose.note import Document, SaveFormat

doc = Document("MyNotes.one")
doc.Save("output.pdf", SaveFormat.Pdf)
print("PDF saved to output.pdf")

Paso 4: Usar PdfSaveOptions

PdfSaveOptions le permite configurar los ajustes de exportación PDF:

from aspose.note import Document
from aspose.note.saving import PdfSaveOptions

doc = Document("MyNotes.one")

opts = PdfSaveOptions()
doc.Save("output.pdf", opts)

Opciones de guardado PDF disponibles

OpciónTipoPredeterminadoDescripción
PageIndexint0El campo existe; no se envía al exportador PDF en v26.3.1: no tiene efecto
PageCountint | NoneNoneEl campo existe; no se envía al exportador PDF en v26.3.1: no tiene efecto

Paso 5: Exportar a un flujo en memoria

Document.Save() acepta un flujo binario directamente: no se necesita archivo 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")

Paso 6: Exportación por lotes de varios archivos

Procesar todos los archivos .one en un directorio:

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}")

Problemas comunes y soluciones

1. ImportError: No existe un módulo llamado ‘reportlab’

Causa: El extra [pdf] no se instaló.

Corrección:

pip install "aspose-note[pdf]"

2. UnsupportedSaveFormatException

Causa: Se utilizó un formato distinto de SaveFormat.Pdf. Sólo SaveFormat.Pdf está implementado.

Corrección: Siempre use SaveFormat.Pdf para exportar. Otros formatos están declarados para compatibilidad con la API, pero generan UnsupportedSaveFormatException.

3. IncorrectPasswordException

Causa: El archivo .one está cifrado. Los documentos cifrados no son compatibles.

Corrección: Utilice un archivo .one sin cifrar. El producto comercial Aspose.Note admite cifrado.

4. FileNotFoundError

Causa: La ruta del archivo de entrada .one es incorrecta.

Corrección: Utilice pathlib.Path.exists() para validar antes de cargar:

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 salida está en blanco o vacío

Causa: El archivo .one contiene páginas pero no contenido de texto (solo imágenes o tablas sin texto). El renderizador PDF genera páginas basándose en lo que ReportLab puede renderizar desde el DOM.

Corrección: Verifique el contenido de la página antes de exportar:

from aspose.note import Document, RichText

doc = Document("MyNotes.one")
text_count = len(doc.GetChildNodes(RichText))
print(f"RichText nodes found: {text_count}")

Preguntas Frecuentes

¿Qué formatos de guardado son compatibles?

Solo SaveFormat.Pdf está implementado actualmente. El enum SaveFormat tiene exactamente un miembro: SaveFormat.Pdf.

¿Puedo exportar a un flujo en lugar de a un archivo?

Sí. Document.Save() acepta cualquier flujo binario escribible como su primer argumento:

import io
from aspose.note import Document, PdfSaveOptions, SaveFormat

doc = Document("MyNotes.one")
buf = io.BytesIO()
doc.Save(buf, PdfSaveOptions())
pdf_bytes = buf.getvalue()

¿La exportación conserva el orden de las páginas?

Sí. Las páginas se exportan en el mismo orden en que aparecen en el DOM (el orden devuelto al iterar el Document).

¿Está disponible la exportación a PDF en Linux?

Sí. ReportLab y Aspose.Note FOSS for Python son ambos independientes del SO.

¿Puedo exportar un subconjunto de páginas?

Los campos PdfSaveOptions.PageIndex y PageCount existen pero no se envían al exportador PDF en la v26.3.1 y no tienen efecto: el documento completo siempre se exporta.


Recursos relacionados:

 Español