Как да експортирате файл OneNote в PDF с Python

Как да експортирате файл OneNote в PDF с Python

Aspose.Note FOSS за Python позволява програмно експортиране в PDF на файлове от раздели на Microsoft OneNote .one без необходимост от Microsoft Office или конвертор на документи на ниво операционна система. Експортът се обработва от метода Document.Save(), подкрепен от опционалния рендерер за PDF ReportLab.

Ползи

  1. Server-friendly: работи на всяка ОС, включително безграфични Linux сървъри и CI/CD контейнери
  2. Stream-capable: запазва директно в буфер io.BytesIO, без нужда от временен файл
  3. Free and open-source: лиценз MIT

Предварителни условия

Експортът в PDF изисква незадължителната зависимост ReportLab. Инсталирайте я чрез допълнителния пакет [pdf]:

pip install "aspose-note[pdf]"

Ако вече имате aspose-note инсталиран без допълнителните:

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

Проверете дали ReportLab е наличен:

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

Ръководство стъпка по стъпка

Стъпка 1: Инсталирайте aspose-note с PDF поддръжка

pip install "aspose-note[pdf]"

Потвърдете инсталацията:

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

Стъпка 2: Заредете OneNote файла

from aspose.note import Document

doc = Document("MyNotes.one")

Стъпка 3: Експортиране на целия документ в PDF

Най‑опростеният експорт, обхващащ всички страници с настройките по подразбиране:

from aspose.note import Document, SaveFormat

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

Стъпка 4: Използвайте PdfSaveOptions

PdfSaveOptions ви позволява да конфигурирате настройките за експортиране в PDF:

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

doc = Document("MyNotes.one")

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

Налични PdfSaveOptions

OptionTypeDefaultDescription
PageIndexint0Полето съществува; не се предава към PDF експортер в v26.3.1: няма ефект
PageCountint | NoneNoneПолето съществува; не се предава към PDF експортер в v26.3.1: няма ефект

Стъпка 5: Експортиране в поток в паметта

Document.Save() приема двоичен поток директно: не е необходим временен файл:

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")

Стъпка 6: Масов експорт на множество файлове

Обработете всички .one файлове в директория:

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}")

Чести проблеми и решения

1. ImportError: No module named ‘reportlab’

Причина: Допълнителната [pdf] добавка не беше инсталирана.

Поправка:

pip install "aspose-note[pdf]"

2. UnsupportedSaveFormatException

Причина: Използван е формат, различен от SaveFormat.Pdf. Само SaveFormat.Pdf е реализиран.

Поправка: Винаги използвайте SaveFormat.Pdf за експортиране. Други формати са декларирани за съвместимост с API, но предизвикват UnsupportedSaveFormatException.

3. IncorrectPasswordException

Причина: Файлът .one е криптиран. Криптираните документи не се поддържат.

Fix: Използвайте некриптиран .one файл. Комерсиалният продукт Aspose.Note поддържа криптиране.

4. FileNotFoundError

Причина: Пътят към входния файл .one е неправилен.

Поправка: Използвайте pathlib.Path.exists() за проверка преди зареждане:

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. Изходният PDF е празен или без съдържание

Cause: Файлът .one съдържа страници, но без текстово съдържание (само изображения или таблици без текст). PDF рендерерът създава страници въз основа на това, което ReportLab може да рендерира от DOM.

Fix: Проверете съдържанието на страницата преди експортиране:

from aspose.note import Document, RichText

doc = Document("MyNotes.one")
text_count = len(doc.GetChildNodes(RichText))
print(f"RichText nodes found: {text_count}")

Често задавани въпроси

Кои формати за запазване се поддържат?

Само SaveFormat.Pdf в момента е реализиран. Перечислението SaveFormat има точно един член: SaveFormat.Pdf.

Мога ли да експортирам към поток вместо към файл?

Да. Document.Save() приема всеки записваем двоичен поток като първи аргумент:

import io
from aspose.note import Document, PdfSaveOptions, SaveFormat

doc = Document("MyNotes.one")
buf = io.BytesIO()
doc.Save(buf, PdfSaveOptions())
pdf_bytes = buf.getvalue()

Запазва ли експортирането реда на страниците?

Да. Страниците се експортират в същия ред, в който се появяват в DOM (редът, върнат при итериране на Document).

Достъпен ли е експортирането в PDF под Linux?

Да. ReportLab и Aspose.Note FOSS for Python са и двете независими от ОС.

Мога ли да експортирам подмножество от страници?

PdfSaveOptions.PageIndex и PageCount полетата съществуват, но не се предават към PDF експортер в v26.3.1 и нямат ефект: целият документ винаги се експортира.


Свързани ресурси:

 Български