Як експортувати файл OneNote у PDF за допомогою Python

Як експортувати файл OneNote у PDF за допомогою Python

Aspose.Note FOSS for 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. Встановіть її через extra [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’

Cause: Додаток [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 порожній або порожній

Причина: Файл .one містить сторінки, але не має текстового вмісту (лише зображення або таблиці без тексту). PDF‑рендерер створює сторінки на основі того, що ReportLab може відобразити з DOM.

Виправлення: Перевірте вміст сторінки перед експортом:

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 enum є точно один член: 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 і не мають жодного впливу: весь документ завжди експортується.


Пов’язані ресурси:

 Українська