Cara Mengeksport Fail OneNote ke PDF dalam Python
Aspose.Note FOSS untuk Python membolehkan eksport PDF secara programatik bagi fail bahagian Microsoft OneNote .one tanpa memerlukan Microsoft Office atau sebarang penukar dokumen pada peringkat sistem operasi. Eksport dikendalikan oleh kaedah Document.Save() yang disokong oleh penjana PDF pilihan ReportLab.
Manfaat
- Mesra-pelayan: berjalan pada mana-mana OS, termasuk pelayan Linux tanpa kepala dan kontena CI/CD
- Boleh aliran: simpan secara langsung ke penampan
io.BytesIO, tidak memerlukan fail sementara - Percuma dan sumber terbuka: lesen MIT
Prasyarat
Eksport PDF memerlukan kebergantungan ReportLab pilihan. Pasang ia melalui tambahan [pdf]:
pip install "aspose-note[pdf]"Jika anda sudah mempunyai aspose-note dipasang tanpa tambahan:
pip install --upgrade "aspose-note[pdf]"Sahkan bahawa ReportLab tersedia:
python -c "import reportlab; print(reportlab.Version)"Panduan Langkah demi Langkah
Langkah 1: Pasang aspose-note dengan Sokongan PDF
pip install "aspose-note[pdf]"Sahkan pemasangan:
from aspose.note import Document, SaveFormat
print("Ready for PDF export.")Langkah 2: Muatkan Fail OneNote
from aspose.note import Document
doc = Document("MyNotes.one")Langkah 3: Eksport Seluruh Dokumen ke PDF
Eksport paling mudah, meliputi semua halaman dengan tetapan lalai:
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 membolehkan anda mengkonfigurasi tetapan eksport PDF:
from aspose.note import Document
from aspose.note.saving import PdfSaveOptions
doc = Document("MyNotes.one")
opts = PdfSaveOptions()
doc.Save("output.pdf", opts)Pilihan PdfSaveOptions yang Tersedia
| Pilihan | Jenis | Lalai | Keterangan |
|---|---|---|---|
PageIndex | int | 0 | Medan wujud; tidak dihantar ke pengekspor PDF dalam v26.3.1: tidak memberi kesan |
PageCount | int | None | None | Medan wujud; tidak dihantar ke pengekspor PDF dalam v26.3.1: tidak memberi kesan |
Langkah 5: Eksport ke Aliran Dalam Memori
Document.Save() menerima aliran binari secara langsung: tidak memerlukan fail 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: Eksport Berkelompok Berbilang Fail
Proses semua fail .one dalam 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}")Isu Umum dan Penyelesaian
1. ImportError: Tiada modul bernama ‘reportlab’
Punca: Tambahan [pdf] tidak dipasang.
Pembetulan:
pip install "aspose-note[pdf]"2. UnsupportedSaveFormatException
Punca: Format selain SaveFormat.Pdf telah digunakan. Hanya SaveFormat.Pdf yang dilaksanakan.
Fix: Sentiasa gunakan SaveFormat.Pdf untuk eksport. Format lain diisytiharkan untuk keserasian API tetapi menghasilkan UnsupportedSaveFormatException.
3. IncorrectPasswordException
Punca: Fail .one disulitkan. Dokumen yang disulitkan tidak disokong.
Pembetulan: Gunakan fail .one yang tidak disulitkan. Produk komersial Aspose.Note menyokong penyulitan.
4. FileNotFoundError
Punca: Laluan fail input .one tidak betul.
Pembetulan: Gunakan pathlib.Path.exists() untuk mengesahkan sebelum memuatkan:
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 tiada
Punca: Fail .one mengandungi halaman tetapi tiada kandungan teks (hanya imej atau jadual tanpa teks). Penjana PDF menghasilkan halaman berdasarkan apa yang ReportLab dapat render daripada DOM.
Pembetulan: Sahkan kandungan halaman sebelum mengeksport:
from aspose.note import Document, RichText
doc = Document("MyNotes.one")
text_count = len(doc.GetChildNodes(RichText))
print(f"RichText nodes found: {text_count}")Soalan Lazim
Format simpanan mana yang disokong?
Hanya SaveFormat.Pdf kini dilaksanakan. Enum SaveFormat mempunyai tepat satu ahli: SaveFormat.Pdf.
Bolehkah saya mengeksport ke aliran bukannya fail?
Ya. Document.Save() menerima sebarang aliran binari yang boleh 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()Adakah eksport mengekalkan susunan halaman?
Ya. Halaman dieksport dalam susunan yang sama seperti yang muncul dalam DOM (susunan yang dikembalikan dengan mengulangi Document).
Adakah eksport PDF tersedia di Linux?
Ya. ReportLab dan Aspose.Note FOSS untuk Python kedua-duanya tidak bergantung pada OS.
Bolehkah saya mengeksport subset halaman?
Medan PdfSaveOptions.PageIndex dan PageCount wujud tetapi tidak dihantar ke pengekspor PDF dalam v26.3.1 dan tidak memberi kesan: keseluruhan dokumen sentiasa dieksport.
Sumber Berkaitan: