چگونه یک فایل OneNote را به PDF در پایتون صادر کنیم
Aspose.Note FOSS برای Python امکان صادرات برنامهنویسی PDF از فایلهای بخش .one Microsoft OneNote را بدون نیاز به Microsoft Office یا هر مبدل سند در سطح سیستمعامل فراهم میکند. صادرات توسط روش Document.Save() که توسط رندرکننده PDF اختیاری ReportLab پشتیبانی میشود، انجام میشود.
مزایا
- Server-friendly: بر روی هر سیستمعاملی اجرا میشود، از جمله سرورهای لینوکس بدون رابط کاربری و کانتینرهای 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)"راهنمای گام به گام
مرحله ۱: نصب 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 موجود
| گزینه | نوع | پیشفرض | توضیح |
|---|---|---|---|
PageIndex | int | 0 | فیلد موجود است؛ در نسخه v26.3.1 به صادرکننده PDF ارسال نمیشود: هیچ اثری ندارد |
PageCount | int | None | None | فیلد موجود است؛ در نسخه 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 ارسال نمیشوند و هیچ تأثیری ندارند: تمام سند همیشه صادر میشود.
منابع مرتبط: