كيفية تصدير ملف OneNote إلى PDF باستخدام Python
Aspose.Note FOSS for Python يتيح تصدير PDF برمجي لملفات أقسام Microsoft OneNote .one دون الحاجة إلى Microsoft Office أو أي محول مستندات على مستوى نظام التشغيل. يتم التعامل مع التصدير عبر طريقة Document.Save() المدعومة بواسطة مُعالج PDF الاختياري ReportLab.
الفوائد
- صديق للخادم: يعمل على أي نظام تشغيل، بما في ذلك خوادم لينكس بدون واجهة وحاويات CI/CD
- قادر على البث: احفظ مباشرةً إلى مخزن
io.BytesIO، لا حاجة لملف مؤقت - مجاني ومفتوح المصدر: ترخيص 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)خيارات حفظ PDF المتاحة
| الخيار | النوع | الافتراضي | الوصف |
|---|---|---|---|
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: لا توجد وحدة باسم ‘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.
هل يمكنني التصدير إلى تدفق بدلاً من ملف؟
نعم. 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 موجودة ولكنها لا تُرسل إلى مُصدّر PDF في الإصدار 26.3.1 ولا تأثير لها: يتم دائمًا تصدير المستند بالكامل.
الموارد ذات الصلة: