كيفية تحميل مستند في Python
Aspose.PDF FOSS لـ Python يقوم بتحميل ملف PDF من مسار ملف، أو بايتات خام، أو تدفق ثنائي إلى كائن Document يمكنك فحصه والتعامل معه. المكتبة هي Python صافية وتُثبت بأمر واحد فقط.
دليل خطوة بخطوة
الخطوة 2: استيراد الفئات المطلوبة
استورد Document لتحميل وحفظ ملف PDF، بالإضافة إلى فئات الاستثناء التي ستتعامل معها عند فشل التحميل:
from aspose_pdf import (
Document,
InvalidPasswordException,
InvalidPdfFileFormatException,
PdfCorruptedError,
PdfParseException,
)الخطوة 3: تحميل ملف PDF من مسار ملف
مرّر مسار ملف مباشرة إلى مُنشئ Document، أو استدعِ load_from صراحةً على مثال موجود — كلاهما يقبل مسارًا، bytes، أو تدفقًا ثنائيًا. استخدم Document كمدير سياق حتى يتم تحرير مقابض الملفات الأساسية تلقائيًا:
from aspose_pdf import Document
with Document("report.pdf") as document:
print(f"Loaded {document.page_count} page(s)")شكل المُنشئ Document(source) يعادل Document().load_from(source):
document = Document()
document.load_from("report.pdf")
print(f"Loaded {document.page_count} page(s)")
document.close()الخطوة 4: تحميل ملف PDF محمي بكلمة مرور
كل من Document(source, password=...) وDocument.load_from(source, password, limits) يقبلان معامل password لملفات PDF المشفرة بكلمة مرور للمستخدم:
from aspose_pdf import Document
with Document("locked.pdf", password="secret") as document:
print(f"Opened encrypted document: {document.page_count} page(s)")
print(f"Encrypted: {document.is_encrypted}")إذا لم يكن المصدر محمياً بكلمة مرور، احذف المعامل — تمرير password=None (الإعداد الافتراضي) يعمل مع ملفات PDF العادية أيضًا.
الخطوة 5: معالجة استثناءات التحميل
ملف مفقود، بيانات غير PDF، كلمة مرور مفقودة أو خاطئة، أو ملف PDF تالف لا يُعيد أبدًا Document فارغًا بصمت — بل يرفع استثناءً. احرص على التقاط فئات الاستثناء المحددة للتعامل معها بصورة مناسبة:
from aspose_pdf import (
Document,
InvalidPasswordException,
InvalidPdfFileFormatException,
PdfCorruptedError,
PdfParseException,
)
try:
document = Document("report.pdf", password="maybe-wrong")
except InvalidPasswordException:
print("The PDF is encrypted; supply the correct password.")
except InvalidPdfFileFormatException:
print("The file is not a valid PDF.")
except PdfCorruptedError as error:
print(f"Unrecoverable corruption at offset {error.offset}: {error.message}")
except PdfParseException as error:
print(f"Could not parse the PDF: {error}")
else:
print(f"Loaded {document.page_count} page(s)")
document.close()PdfCorruptedError وشقيقه PdfMalformedError يحملان كل منهما خصائص message وoffset وrecoverable، وهو مفيد لتسجيل المكان الدقيق الذي فشل فيه ملف معطوب في التحليل. عند معالجة مدخلات غير موثوقة، احرص أيضًا على التقاط PdfResourceLimitException، الذي يُرفع عندما يتجاوز المستند سياسة الأمان الافتراضية PdfLoadLimits (حجم الإدخال، عدد الكائنات، حجم التيار المُفكك، وما شابه ذلك).
الخطوة 7: تحرير موارد المستند
استخدام Document كمدير سياق (with Document(...) as document:) يغلق المستند تلقائيًا عند خروج الكتلة. عندما تنشئ Document خارج كتلة with، استدعِ close() أو dispose() صراحةً بمجرد الانتهاء منها:
document = Document()
document.load_from("report.pdf")
try:
print(document.page_count)
finally:
document.close()المشكلات الشائعة والحلول
InvalidPasswordException يتم رفعه بالرغم من أنني لم أظن أن الملف مشفر
ملف PDF المصدر يحتوي على كلمة مرور مستخدم مُعينة. تأكد من ذلك مع مصدر الملف، ثم مرّر القيمة الصحيحة كمعامل password إلى Document(...) أو load_from(...).
InvalidPdfFileFormatException على ملف يبدو سليمًا
الملف ليس PDF صالحًا — قد يكون صفحة خطأ HTML، أو تنزيلًا مقطوعًا، أو تنسيقًا مختلفًا محفوظًا بامتداد .pdf. افتح الملف في محرر نصوص وتأكد من أنه يبدأ بـ %PDF-.
PdfCorruptedError على ملف يفتح في عارضات أخرى
بعض قارئات PDF تقوم بإصلاح البنية المكسورة بصمت. Document يطلق PdfCorruptedError للفساد غير القابل للاسترداد و PdfMalformedError للمشكلات الهيكلية القابلة للاسترداد — افحص خاصية offset في الاستثناء لتحديد منطقة المشكلة في تدفق البايت.
PdfResourceLimitException على ملف PDF كبير أو معقّد
تجاوز المستند الحد الافتراضي لـ PdfLoadLimits (حجم الإدخال، عدد الكائنات، حجم الدفق المفكوك، وغيرها من الحدود المصممة لحماية ضد المدخلات غير الموثوقة). أنشئ PdfLoadLimits مخصصًا ومرره كـ limits= إلى Document(...) أو load_from(...) إذا كان الملف موثوقًا وتحتاج إلى حدود أعلى.
نسيان إغلاق Document تم فتحه خارج with block
استدعِ document.close() (أو document.dispose()) بمجرد الانتهاء، أو حمِّل الملف باستخدام with Document(source) as document: حتى يتم التنظيف تلقائيًا حتى لو حدث استثناء داخل الكتلة.
الأسئلة المتكررة
ما الذي يمكنني تمريره كمعامل source عند تحميل PDF؟
Document(source) وDocument.load_from(source, password, limits) تقبل مسار ملف، bytes خام، أو أي دفق ثنائي.
كيف يمكنني تحميل ملف PDF موجود بالفعل في الذاكرة بدلاً من القرص؟
مرّر كائن bytes مباشرةً: Document(pdf_bytes)، أو استدعِ document.load_from(pdf_bytes) على نسخة Document موجودة.
هل يتطلب تحميل ملف PDF كلمة المرور الصحيحة مسبقًا، أم يمكنني التحقق أولاً؟
is_encrypted متاح فقط بعد تحميل ناجح، لذا يجب فتح ملف PDF مشفر باستخدام معامل password الصحيح في نفس الاستدعاء. امسك InvalidPasswordException إذا كنت بحاجة إلى طلب كلمة مرور تفاعليًا.