Como Exportar um Arquivo OneNote para PDF em Python

Como Exportar um Arquivo OneNote para PDF em Python

Aspose.Note FOSS for Python permite exportação programática de PDFs de arquivos de seção do Microsoft OneNote .one sem exigir Microsoft Office ou qualquer conversor de documentos ao nível do sistema operacional. A exportação é tratada pelo método Document.Save() suportado pelo renderizador PDF opcional ReportLab.

Benefícios

  1. Server-friendly: funciona em qualquer SO, incluindo servidores Linux sem interface gráfica e contêineres CI/CD
  2. Stream-capable: salva diretamente em um buffer io.BytesIO, sem necessidade de arquivo temporário
  3. Free and open-source: licença MIT

Pré-requisitos

A exportação de PDF requer a dependência opcional ReportLab. Instale-a via o extra [pdf]:

pip install "aspose-note[pdf]"

Se você já tem aspose-note instalado sem o extra:

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

Verifique se o ReportLab está disponível:

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

Guia passo a passo

Etapa 1: Instalar aspose-note com suporte a PDF

pip install "aspose-note[pdf]"

Confirme a instalação:

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

Etapa 2: Carregar o arquivo OneNote

from aspose.note import Document

doc = Document("MyNotes.one")

Etapa 3: Exportar o Documento Inteiro para PDF

A exportação mais simples, cobrindo todas as páginas com as configurações padrão:

from aspose.note import Document, SaveFormat

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

Etapa 4: Use PdfSaveOptions

PdfSaveOptions permite que você configure as configurações de exportação de PDF:

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

doc = Document("MyNotes.one")

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

Opções de salvamento PDF disponíveis

OptionTypeDefaultDescription
PageIndexint0Campo existe; não encaminhado para o exportador PDF na v26.3.1: não tem efeito
PageCountint | NoneNoneCampo existe; não encaminhado para o exportador PDF na v26.3.1: não tem efeito

Etapa 5: Exportar para um fluxo na memória

Document.Save() aceita um fluxo binário diretamente: nenhum arquivo temporário necessário:

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: Exportação em lote de vários arquivos

Processar todos os arquivos .one em um diretório:

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 Comuns e Soluções

1. ImportError: Nenhum módulo chamado ‘reportlab’

Causa: O extra [pdf] não foi instalado.

Correção:

pip install "aspose-note[pdf]"

2. UnsupportedSaveFormatException

Causa: Um formato diferente de SaveFormat.Pdf foi usado. Apenas SaveFormat.Pdf está implementado.

Correção: Sempre use SaveFormat.Pdf para exportação. Outros formatos são declarados para compatibilidade de API, mas geram UnsupportedSaveFormatException.

3. IncorrectPasswordException

Causa: O arquivo .one está criptografado. Documentos criptografados não são suportados.

Correção: Use um arquivo .one não criptografado. O produto comercial Aspose.Note suporta criptografia.

4. FileNotFoundError

Causa: O caminho do arquivo de entrada .one está incorreto.

Correção: Use pathlib.Path.exists() para validar antes 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. O PDF de saída está em branco ou vazio

Causa: O arquivo .one contém páginas, mas nenhum conteúdo de texto (apenas imagens ou tabelas sem texto). O renderizador PDF produz páginas com base no que o ReportLab pode renderizar a partir do DOM.

Correção: Verifique o conteúdo da 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}")

Perguntas Frequentes

Quais formatos de salvamento são suportados?

Apenas SaveFormat.Pdf está atualmente implementado. O enum SaveFormat tem exatamente um membro: SaveFormat.Pdf.

Posso exportar para um fluxo em vez de um arquivo?

Sim. Document.Save() aceita qualquer fluxo binário gravável como seu primeiro 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()

A exportação preserva a ordem das páginas?

Sim. As páginas são exportadas na mesma ordem em que aparecem no DOM (a ordem retornada ao iterar o Document).

A exportação de PDF está disponível no Linux?

Sim. ReportLab e Aspose.Note FOSS for Python são ambos independentes de SO.

Posso exportar um subconjunto de páginas?

Os campos PdfSaveOptions.PageIndex e PageCount existem, mas não são encaminhados para o exportador PDF na v26.3.1 e não têm efeito: o documento inteiro é sempre exportado.


Recursos Relacionados:

 Português