الجمعة، 18 أكتوبر 2024

كيفية ضغط ملفات PDF باستخدام بايثون؟

 لنفترض أن لديك ملف PDF، ولكنه كبير الحجم وترغب في ضغطه (ربما تريد تقليل حجمه للسماح بنقل أسرع عبر الإنترنت، أو ربما لتوفير مساحة التخزين).

الأمر الأكثر تحديًا هو أن نفترض أن لديك ملفات PDF متعددة تريد ضغطها.

توجد خيارات متعددة عبر الإنترنت، ولكنها تسمح عادةً بمعالجة عدد محدود من الملفات في المرة الواحدة. وبالطبع هناك أيضًا الوقت الإضافي المطلوب لتحميل الملفات الأصلية، ثم تنزيل النتائج. وبالطبع، ربما لا تشعر بالراحة عند مشاركة ملفاتك مع الإنترنت.

لحسن الحظ، يمكننا استخدام بايثون لمعالجة كل هذه المشكلات. ولكن قبل أن نتعلم كيفية القيام بذلك، دعونا أولاً نتعلم القليل عن ملفات PDF.

نبذة عن ضغط ملفات PDF

وفقًا لدوف إسحاقس، العالم الرئيسي السابق في شركة Adobe (انظر مناقشته هنا)، فإن مستندات PDF مضغوطة بالفعل إلى حد كبير.

إن أجزاء النصوص والرسومات المتجهة في المستندات مضغوطة داخليًا بالفعل، لذا فإن فرص التحسين هنا ضئيلة.

بدلاً من ذلك، يتم تحقيق أي تحسينات في ضغط الملفات من خلال ضغط أجزاء الصور من مستندات PDF، إلى جانب احتمال فقدان جودة الصورة.

قد يكون الضغط ممكنًا، ولكن يجب على المستخدم الاختيار بين مقدار الضغط مقابل مقدار فقدان جودة الصورة المقبول.

الإعدادات

كتب مبرمج يُدعى Theeko74 نصًا برمجيًا بلغة بايثون يُسمى “pdf_compressor.py”. هذا النص البرمجي عبارة عن غلاف لوظائف ghostscript التي تقوم بالعمل الفعلي المتمثل في ضغط ملفات PDF.

يتم تقديم هذا البرنامج النصي بموجب ترخيص MIT وهو مجاني للاستخدام حسب رغبة المستخدم.

تلميح: تأكد من تثبيت ghostscript على جهاز الكمبيوتر لديك. لتثبيت ghostscript، اتبع هذا الدليل المفصل ثم عد بعد ذلك.

الآن قم بتنزيل pdf_compressor.py من GitHub.

في النهاية سوف نقوم بكتابة نص برمجي بلغة بايثون لأداء عملية الضغط.

لذا نقوم بإنشاء دليل لحمل البرنامج النصي، ونستخدم محررنا المفضل أو IDE لإنشائه (يستخدم هذا المثال سطر أوامر Linux لإنشاء الدليل، ويستخدم vim كمحرر لإنشاء البرنامج النصي “bpdfc.py”؛ استخدم اختيارك المفضل لإنشاء الدليل وإنشاء البرنامج النصي داخله):

1
2
3
$ mkdir batchPDFcomp
$ cd batchPDFcomp
$ vim bpdfc.py

عندما نكتب البرنامج النصي، سنقوم باستيراد “pdf_compressor.py” كوحدة نمطية داخله.

للتحضير لذلك يجب علينا إنشاء دليل فرعي أسفل دليل البرنامج النصي الخاص بـ Python.

بالإضافة إلى ذلك، سنحتاج إلى نسخ pdf_compressor.py إلى هذا الدليل الفرعي، وسنحتاج إلى إنشاء ملف __init__.py داخل نفس الدليل الفرعي:

1
2
3
4
$ mkdir pdfc
$ cp ~/Downloads/pdf_compressor.py ~/batchPDFcomp/pdfc/
$ cd pdfc
$ vim __init__.py

ما قمنا به هنا هو إنشاء حزمة محلية pdfc تحتوي على وحدة pdf_compressor.py.

💡 ملاحظة: يشير وجود الملف init.py إلى Python أن هذا الدليل هو جزء من الحزمة، ويجب البحث هناك عن الوحدات النمطية.

نحن الآن جاهزون لكتابة النص الخاص بنا.

برنامج ضغط PDF في بايثون

هنا هو البرنامج النصي:

1
2
from pdfc.pdf_compressor import compress
compress('Finxter_WorldsMostDensePythonCheatSheet.pdf', 'Finxter_WorldsMostDensePythonCheatSheet_compr.pdf', power=4)

كما ترى، إنه نص قصير جدًا.

أولاً نقوم باستيراد وظيفة “compress” من وحدة “pdf_compressor”.

ثم نستدعي وظيفة “compress”. تأخذ الوظيفة كوسائط: مسار ملف الإدخال، ومسار ملف الإخراج، ووسيطة “power” التي تحدد الضغط على النحو التالي، من أقل ضغط إلى أعلى ضغط (وفقًا للوثائق الموجودة في البرنامج النصي):

مستويات الضغط:

  • 0: default
  • 1: prepress
  • 2: printer
  • 3: ebook
  • 4: screen

تشغيل البرنامج النصي

الآن يمكننا تشغيل البرنامج النصي الخاص بنا:

1
2
3
4
5
6
$  python bpdfc.py
Compress PDF...
Compression by 51%.
Final file size is 0.2MB
Done.
$

لقد قمنا بضغط مستند PDF واحد فقط في هذا المثال، ولكن عن طريق تعديل البرنامج النصي للتنقل عبر مستندات PDF متعددة، يمكنك ضغط ملفات متعددة في وقت واحد.

نأمل أن تكون قد وجدت هذه المقالة مفيدة. نشكرك على القراءة، ونتمنى لك برمجة سعيدة!

ليست هناك تعليقات:

إرسال تعليق

جلب البيانات من صفحة ويب باستخدام Selenium

  في هذا الدرس، سننشئ أداة لاستخراج البيانات من أي موقع ويب باستخدام Selenium. Selenium هو مشروع مفتوح المصدر يستخدم لأتمتة المتصفحات. وهو ي...