Как да експортирате файл OneNote в PDF с Python
Aspose.Note FOSS за 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. Инсталирайте я чрез допълнителния пакет [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’
Причина: Допълнителната [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 и нямат ефект: целият документ винаги се експортира.
Свързани ресурси: