Cara Mengeksport Fail OneNote ke PDF dalam Python

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

  1. Mesra-pelayan: berjalan pada mana-mana OS, termasuk pelayan Linux tanpa kepala dan kontena CI/CD
  2. Boleh aliran: simpan secara langsung ke penampan io.BytesIO, tidak memerlukan fail sementara
  3. 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

PilihanJenisLalaiKeterangan
PageIndexint0Medan wujud; tidak dihantar ke pengekspor PDF dalam v26.3.1: tidak memberi kesan
PageCountint | NoneNoneMedan 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:

 Bahasa Melayu