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
- Server-friendly: funciona em qualquer SO, incluindo servidores Linux sem interface gráfica e contêineres CI/CD
- Stream-capable: salva diretamente em um buffer
io.BytesIO, sem necessidade de arquivo temporário - 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
| Option | Type | Default | Description |
|---|---|---|---|
PageIndex | int | 0 | Campo existe; não encaminhado para o exportador PDF na v26.3.1: não tem efeito |
PageCount | int | None | None | Campo 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: