كيفية تصدير ملف OneNote إلى PDF باستخدام Python

كيفية تصدير ملف OneNote إلى PDF باستخدام Python

Aspose.Note FOSS for Python يتيح تصدير PDF برمجي لملفات أقسام Microsoft OneNote .one دون الحاجة إلى Microsoft Office أو أي محول مستندات على مستوى نظام التشغيل. يتم التعامل مع التصدير عبر طريقة Document.Save() المدعومة بواسطة مُعالج PDF الاختياري ReportLab.

الفوائد

  1. صديق للخادم: يعمل على أي نظام تشغيل، بما في ذلك خوادم لينكس بدون واجهة وحاويات CI/CD
  2. قادر على البث: احفظ مباشرةً إلى مخزن io.BytesIO، لا حاجة لملف مؤقت
  3. مجاني ومفتوح المصدر: ترخيص 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 المتاحة

الخيارالنوعالافتراضيالوصف
PageIndexint0الحقل موجود؛ لم يتم إرساله إلى مُصدّر PDF في v26.3.1: لا تأثير له
PageCountint | NoneNoneالحقل موجود؛ لم يتم إرساله إلى مُصدّر 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 ولا تأثير لها: يتم دائمًا تصدير المستند بالكامل.


الموارد ذات الصلة:

 العربية