چگونه یک فایل OneNote را به PDF در پایتون صادر کنیم

چگونه یک فایل OneNote را به PDF در پایتون صادر کنیم

Aspose.Note FOSS برای Python امکان صادرات برنامه‌نویسی PDF از فایل‌های بخش .one Microsoft OneNote را بدون نیاز به Microsoft Office یا هر مبدل سند در سطح سیستم‌عامل فراهم می‌کند. صادرات توسط روش Document.Save() که توسط رندرکننده PDF اختیاری ReportLab پشتیبانی می‌شود، انجام می‌شود.

مزایا

  1. Server-friendly: بر روی هر سیستم‌عاملی اجرا می‌شود، از جمله سرورهای لینوکس بدون رابط کاربری و کانتینرهای 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)"

راهنمای گام به گام

مرحله ۱: نصب aspose-note با پشتیبانی PDF

pip install "aspose-note[pdf]"

نصب را تأیید کنید:

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

مرحله ۲: بارگذاری فایل OneNote

from aspose.note import Document

doc = Document("MyNotes.one")

مرحله ۳: خروجی گرفتن کل سند به 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 موجود

گزینهنوعپیش‌فرضتوضیح
PageIndexint0فیلد موجود است؛ در نسخه v26.3.1 به صادرکننده PDF ارسال نمی‌شود: هیچ اثری ندارد
PageCountint | NoneNoneفیلد موجود است؛ در نسخه v26.3.1 به صادرکننده PDF ارسال نمی‌شود: هیچ اثری ندارد

مرحله 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: ماژولی به نام ‘reportlab’ یافت نشد

دلیل: افزونه [pdf] نصب نشده بود.

اصلاح:

pip install "aspose-note[pdf]"

2. UnsupportedSaveFormatException

دلیل: فرمت دیگری به جز SaveFormat.Pdf استفاده شد. فقط SaveFormat.Pdf پیاده‌سازی شده است.

رفع: همیشه از SaveFormat.Pdf برای صادرات استفاده کنید. سایر فرمت‌ها برای سازگاری API اعلام شده‌اند اما UnsupportedSaveFormatException را ایجاد می‌کنند.

3. IncorrectPasswordException

دلیل: فایل .one رمزگذاری شده است. اسناد رمزگذاری شده پشتیبانی نمی‌شوند.

رفع: از یک فایل بدون رمزگذاری .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 دقیقاً یک عضو دارد: SaveFormat.Pdf.

آیا می‌توانم به‌جای یک فایل، به یک stream صادر کنم؟

بله. 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 در لینوکس موجود است؟

بله. ReportLab و Aspose.Note FOSS for Python هر دو مستقل از سیستم‌عامل هستند.

آیا می‌توانم یک زیرمجموعه از صفحات را صادر کنم؟

فیلدهای PdfSaveOptions.PageIndex و PageCount وجود دارند اما در نسخه v26.3.1 به صادرکننده PDF ارسال نمی‌شوند و هیچ تأثیری ندارند: تمام سند همیشه صادر می‌شود.


منابع مرتبط:

 فارسی