Cara Mengekspor File OneNote ke PDF dengan Python
Aspose.Note FOSS for Python memungkinkan ekspor PDF programatik dari file bagian Microsoft OneNote .one tanpa memerlukan Microsoft Office atau konverter dokumen tingkat sistem operasi apa pun. Ekspor ditangani oleh metode Document.Save() yang didukung oleh renderer PDF opsional ReportLab.
Manfaat
- Server-friendly: berjalan pada semua OS, termasuk server Linux tanpa tampilan dan kontainer CI/CD
- Stream-capable: menyimpan langsung ke buffer
io.BytesIO, tidak memerlukan file sementara - Free and open-source: lisensi MIT
Prasyarat
Ekspor PDF memerlukan dependensi opsional ReportLab. Instal melalui ekstra [pdf]:
pip install "aspose-note[pdf]"Jika Anda sudah memiliki aspose-note terpasang tanpa tambahan:
pip install --upgrade "aspose-note[pdf]"Verifikasi bahwa ReportLab tersedia:
python -c "import reportlab; print(reportlab.Version)"Panduan Langkah-demi-Langkah
Langkah 1: Instal aspose-note dengan Dukungan PDF
pip install "aspose-note[pdf]"Konfirmasi instalasi:
from aspose.note import Document, SaveFormat
print("Ready for PDF export.")Langkah 2: Muat File OneNote
from aspose.note import Document
doc = Document("MyNotes.one")Langkah 3: Ekspor Seluruh Dokumen ke PDF
Ekspor paling sederhana, mencakup semua halaman dengan pengaturan default:
from aspose.note import Document, SaveFormat
doc = Document("MyNotes.one")
doc.Save("output.pdf", SaveFormat.Pdf)
print("PDF saved to output.pdf")Langkah 4: Gunakan PdfSaveOptions
PdfSaveOptions memungkinkan Anda mengonfigurasi pengaturan ekspor PDF:
from aspose.note import Document
from aspose.note.saving import PdfSaveOptions
doc = Document("MyNotes.one")
opts = PdfSaveOptions()
doc.Save("output.pdf", opts)Opsi PdfSave yang Tersedia
| Option | Type | Default | Description |
|---|---|---|---|
PageIndex | int | 0 | Bidang ada; tidak diteruskan ke pengekspor PDF di v26.3.1: tidak berpengaruh |
PageCount | int | None | None | Bidang ada; tidak diteruskan ke pengekspor PDF di v26.3.1: tidak berpengaruh |
Langkah 5: Ekspor ke Stream dalam Memori
Document.Save() menerima aliran biner secara langsung: tidak perlu file sementara:
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")Langkah 6: Ekspor Massal Beberapa File
Proses semua file .one dalam sebuah direktori:
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}")Masalah Umum dan Solusi
1. ImportError: Tidak ada modul bernama ‘reportlab’
Penyebab: Ekstra [pdf] tidak diinstal.
Perbaikan:
pip install "aspose-note[pdf]"2. UnsupportedSaveFormatException
Penyebab: Format selain SaveFormat.Pdf telah digunakan. Hanya SaveFormat.Pdf yang diimplementasikan.
Perbaikan: Selalu gunakan SaveFormat.Pdf untuk ekspor. Format lain dideklarasikan untuk kompatibilitas API tetapi memicu UnsupportedSaveFormatException.
3. IncorrectPasswordException
Penyebab: File .one dienkripsi. Dokumen yang dienkripsi tidak didukung.
Perbaikan: Gunakan file .one yang tidak terenkripsi. Produk komersial Aspose.Note mendukung enkripsi.
4. FileNotFoundError
Penyebab: Jalur file .one input tidak benar.
Perbaikan: Gunakan pathlib.Path.exists() untuk memvalidasi sebelum memuat:
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. Output PDF kosong atau tidak berisi apa‑apa
Penyebab: File .one berisi halaman tetapi tidak ada konten teks (hanya gambar atau tabel tanpa teks). Renderer PDF menghasilkan halaman berdasarkan apa yang dapat dirender ReportLab dari DOM.
Perbaikan: Verifikasi konten halaman sebelum mengekspor:
from aspose.note import Document, RichText
doc = Document("MyNotes.one")
text_count = len(doc.GetChildNodes(RichText))
print(f"RichText nodes found: {text_count}")Pertanyaan yang Sering Diajukan
Format penyimpanan apa yang didukung?
Hanya SaveFormat.Pdf yang saat ini diimplementasikan. Enum SaveFormat memiliki tepat satu anggota: SaveFormat.Pdf.
Bisakah saya mengekspor ke stream alih-alih ke file?
Ya. Document.Save() menerima setiap aliran biner yang dapat ditulis sebagai argumen pertamanya:
import io
from aspose.note import Document, PdfSaveOptions, SaveFormat
doc = Document("MyNotes.one")
buf = io.BytesIO()
doc.Save(buf, PdfSaveOptions())
pdf_bytes = buf.getvalue()Apakah ekspor mempertahankan urutan halaman?
Ya. Halaman diekspor dalam urutan yang sama seperti yang muncul di DOM (urutan yang dikembalikan dengan mengiterasi Document).
Apakah ekspor PDF tersedia di Linux?
Ya. ReportLab dan Aspose.Note FOSS for Python keduanya bersifat OS-independen.
Apakah saya dapat mengekspor sebagian halaman?
Bidang PdfSaveOptions.PageIndex dan PageCount ada tetapi tidak diteruskan ke pengekspor PDF pada v26.3.1 dan tidak berpengaruh: seluruh dokumen selalu diekspor.
Sumber Daya Terkait: