Як експортувати файл OneNote у PDF за допомогою Python
Aspose.Note FOSS for Python дозволяє програмно експортувати PDF‑файли розділів Microsoft OneNote .one без необхідності Microsoft Office або будь‑якого конвертера документів на рівні операційної системи. Експорт здійснюється методом Document.Save(), який підтримується необов’язковим рендерером PDF ReportLab.
Переваги
- Server-friendly: працює на будь‑якій ОС, включаючи безголові Linux‑сервери та CI/CD‑контейнери
- Stream-capable: зберігати безпосередньо у буфер
io.BytesIO, без потреби у тимчасовому файлі - 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
| Option | Type | Default | Description |
|---|---|---|---|
PageIndex | int | 0 | Поле існує; не передається експортеру PDF у v26.3.1: не має ефекту |
PageCount | int | None | None | Поле існує; не передається експортеру 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 і не мають жодного впливу: весь документ завжди експортується.
Пов’язані ресурси: