آخر تحديث: 29 يناير، 2025

العنوان - العمل مع ملفات PDF في بايثون

في هذه المقالة، سنرشدك إلى كيفية العمل مع ملفات PDF باستخدام بايثون. سنستخدم مكتبة pypdf.

باستخدام مكتبة pypdf، سنوضح كيفية تنفيذ عمليات متنوعة في بايثون مثل:

  • استخراج النصوص من ملفات PDF
  • تدوير صفحات PDF
  • دمج ملفات PDF متعددة
  • تقسيم ملفات PDF إلى ملفات منفصلة
  • إضافة علامات مائية إلى صفحات PDF

ملاحظة: تحتوي هذه المقالة على الكثير من التفاصيل القيمة، لذا لا تتردد في تخطي الأقسام التي تهتم بها أكثر! تم تنظيم المحتوى لسهولة التنقل حتى تتمكن بسرعة من التركيز على ما يهمك.

رسم توضيحي - العمل مع ملفات PDF في بايثون

أمثلة الشفرات البرمجية

يمكنك تنزيل جميع الشفرات البرمجية المستخدمة في هذه المقالة من الرابط التالي. يشمل الكود وملفات الإدخال وملفات الإخراج.

تثبيت pypdf

لتثبيت pypdf، كل ما عليك فعله هو تنفيذ الأمر التالي في نافذة الأوامر أو موجه الأوامر:

pip install pypdf

ملاحظة: الأمر أعلاه حساس لحالة الأحرف.

1. استخراج النصوص من ملف PDF باستخدام بايثون

شرح الكود

1. إنشاء كائن قارئ PDF

reader = PdfReader(pdf_file)
  • يقوم الأمر PdfReader(pdf_file) بتحميل ملف PDF في كائن قارئ.
  • يتيح هذا الكائن الوصول إلى الصفحات ومحتواها.

2. التكرار عبر الصفحات

for page_number, page in enumerate(reader.pages, start=1):
  • reader.pages تُرجع قائمة بالصفحات في ملف PDF.
  • enumerate(..., start=1) يعين رقم الصفحة بدءًا من 1.

3. طباعة النص المستخرج

    print(f"Page {page_number}:")
    print(page.extract_text())
    print("-" * 50)  # فاصلة للقراءة
  • page.extract_text() يستخرج النص من الصفحة الحالية.
  • يُطبع النص المستخرج مع رقم الصفحة.
  • "-" * 50 يُطبع خط فاصلة (--------------------------------------------------) لتحسين القراءة.

ملف PDF المدخل المستخدم في الكود

ناتج الكود

2. تدوير صفحات PDF باستخدام بايثون

شرح الكود

الكود يقوم بتدوير الصفحة الأولى بزاوية 90° باتجاه عقارب الساعة وحفظ ملف PDF المعدل دون التأثير على الصفحات الأخرى.

1. استيراد الفئات المطلوبة

from pypdf import PdfReader, PdfWriter
  • PdfReader: لقراءة ملف الـPDF المدخل.
  • PdfWriter: لإنشاء وحفظ ملف PDF مع التعديلات.

2. تعيين مسارات ملفات الإدخال والإخراج

input_pdf = "pdf-to-rotate/input.pdf"
output_pdf = "pdf-to-rotate/rotated_output.pdf"
  • يُقرأ الكود من input.pdf ويحفظ الملف المعدل كـ rotated_output.pdf.

3. قراءة ملف PDF وإنشاء كائن الكاتب

reader = PdfReader(input_pdf)
writer = PdfWriter()
  • reader تحميل ملف PDF الحالي.
  • writer يُستخدم لتخزين الصفحات المعدلة.

4. تدوير الصفحة الأولى بزاوية 90 درجة

page = reader.pages[0]
page.rotate(90)  # التدوير 90 درجة باتجاه عقارب الساعة
writer.add_page(page)
  • استخراج الصفحة 1، وتدويرها 90 درجة، وإضافتها إلى ملف PDF الجديد.

5. إضافة الصفحات المتبقية دون تغييرات

for i in range(1, len(reader.pages)):
    writer.add_page(reader.pages[i])
  • تمر عبر الصفحات المتبقية وإضافتها كما هي.

6. حفظ ملف PDF الجديد

with open(output_pdf, "wb") as file:
    writer.write(file)
  • فتح rotated_output.pdf في وضع الكتابة الثنائية وحفظ ملف PDF الجديد.

7. طباعة تأكيد

print(f"Rotated page saved to {output_pdf}")
  • يعرض رسالة تأكيد النجاح.

ملف PDF المدخل المستخدم في الكود وناتج التدوير

لقطة شاشة لقطة شاشة للصفحة المدورة في PDF باستخدام بايثون

3. دمج ملفات PDF باستخدام بايثون

يوضح هذا الكود في بايثون كيفية دمج عدة ملفات PDF من دليل إلى ملف PDF واحد باستخدام مكتبة PyPDF.

شرح الكود

  • يقوم هذا البرنامج بدمج جميع ملفات PDF الموجودة في الدليل المحدد (pdfs-to-merge) تلقائيًا في ملف إخراج واحد (merged_output.pdf).
  • يضمن وجود دليل الإخراج ويضيف صفحات كل PDF وفقًا لترتيبها.
  • يتم إخراج الملف النهائي المدمج في مجلد output-dir الفرعي.

تفاصيل الكود

1. استيراد المكتبات

import os
from pypdf import PdfReader, PdfWriter
  • os: يستخدم للتفاعل مع نظام الملفات مثل قراءة الأدلة وإدارة مسارات الملفات.
  • PdfReader: يقرأ محتوى ملف PDF.
  • PdfWriter: ينشئ ويكتب ملف PDF جديد.

2. تحديد الدليل وملف الإخراج

directory = "pdfs-to-merge"
output_file = "output-dir/merged_output.pdf"
  • directory: يحدد المجلد الذي تُخزن فيه ملفات الـPDF.
  • output_file: يعرف مسار واسم ملف الـPDF الناتج والمدمج.

3. إنشاء دليل الإخراج إذا لم يكن موجودًا

os.makedirs(os.path.join(directory, "output-dir"), exist_ok=True)
  • يضمن وجود دليل الإخراج، وإذا لم يكن موجودًا، يقوم بإنشائه.

4. إنشاء كائن PdfWriter

writer = PdfWriter()
  • writer يُستخدم لتجميع ودمج جميع الصفحات من ملفات الـPDF.

5. التكرار عبر جميع ملفات PDF في الدليل

for file_name in sorted(os.listdir(directory)):
    if file_name.endswith(".pdf"):
        file_path = os.path.join(directory, file_name)
        print(f"Adding: {file_name}")
  • يمر عبر جميع الملفات في الدليل المحدد، ويفحص الملفات ذات الامتداد .pdf. يستخدم sorted() لفرزها أبجديًا.

6. قراءة كل PDF وإرفاق الصفحات بالكاتب

reader = PdfReader(file_path)
writer.append(reader)
  • لكل PDF، يقرأ PdfReader الملف، ثم تضيف جميع الصفحات الموجودة في هذا الـPDF إلى writer.

7. كتابة ملف PDF المدمج في ملف إخراج

output_path = os.path.join(directory, output_file)
with open(output_path, "wb") as output_pdf:
    writer.write(output_pdf)
  • بعد تجميع جميع الصفحات، يقوم writer.write() بكتابة ملف الـPDF المدمج إلى المسار المحدد للإخراج.

8. طباعة تأكيد

print(f"Merged PDF saved as: {output_path}")
  • يطبع رسالة تأكيد تؤكد مكان حفظ ملف الـPDF المدمج.

ملفات الـPDF المدخلة المستخدمة في الكود وملف الـPDF المدمج الناتج

4. تقسيم ملف PDF باستخدام بايثون

شرح الكود

تقوم الشفرة أعلاه بتقسيم ملف PDF إلى صفحات منفصلة باستخدام مكتبة PyPDF. في البداية، تتأكد الشفرة من أن مجلد الإخراج موجود، ثم تقرأ ملف الـPDF المدخل. وتكرارًا على كل صفحة، تنشئ الشفرة كائن PdfWriter جديدًا وتخزن كل صفحة كملف PDF فردي. يتم تسمية ملفات الإخراج بشكل تسلسلي (مثل page_1.pdf، page_2.pdf) وتخزن في مجلد output-dir. وأخيرًا، تطبع الشفرة رسالة تأكيد لكل ملف تم إنشاؤه وتخبر عند انتهاء العملية.

ملف PDF المدخل وملفات الإخراج المنقسمة

5. إضافة علامة مائية إلى ملف PDF باستخدام بايثون

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

شرح الكود

تقرأ الشفرة أعلاه ملف PDF مدخلًا، وتستخرج ملف علامة مائية بصفحة واحدة، وتقوم بتطبيق العلامة المائية على كل صفحة من ملف الـPDF المدخل، وتحفظ ملف PDF النهائي المدموغ.

تفاصيل الشفرة

إليك شرح موجز لكل جزء

1. استيراد الفئات المطلوبة

from pypdf import PdfReader, PdfWriter
  • PdfReader لقراءة ملفات PDF الحالية.
  • PdfWriter لإنشاء وكتابة ملف PDF جديد.

2. تعيين مسارات الملفات

input_pdf = "pdf-to-watermark/input.pdf"
watermark_pdf = "pdf-to-watermark/watermark.pdf"
output_pdf = "pdf-to-watermark/output_with_watermark.pdf"
  • input_pdf: ملف الـPDF الأصلي الذي سيتم إضافة العلامة المائية إليه.
  • watermark_pdf: ملف PDF منفصل بصفحة واحدة يخدم كعلامة مائية.
  • output_pdf: الملف الناتج الذي سيحتوي على الصفحات المدموغة.

3. قراءة ملفات الـPDF

reader = PdfReader(input_pdf)
watermark = PdfReader(watermark_pdf)
  • reader: يقرأ ملف الـPDF المدخل.
  • watermark: يقرأ ملف الـPDF الخاص بالعلامة المائية.

4. إنشاء كائن كاتب

writer = PdfWriter()
  • هذا سيتم استخدامه لإنشاء ملف الـPDF النهائي المدموغ.

5. استخراج صفحة العلامة المائية

watermark_page = watermark.pages[0]
  • يفترض أن ملف العلامة المائية يحتوي فقط على صفحة واحدة، تُستخدم للتراكب على جميع الصفحات.

6. التكرار عبر صفحات ملف الـPDF المدخل ودمج العلامة المائية

for page in reader.pages:
    # دمج العلامة المائية بالصفحة الحالية
    page.merge_page(watermark_page)
    
    # أضف الصفحة المدموجة إلى الكاتب
    writer.add_page(page)
  • التكرار لكل صفحة من input_pdf.
  • merge_page(watermark_page) يضع العلامة المائية فوق الصفحة الحالية.
  • يُضاف الصفحة المعدلة إلى writer.

7. حفظ ملف الـPDF المدموغ

with open(output_pdf, "wb") as output_file:
    writer.write(output_file)
  • يكتب الصفحات المعدلة في ملف PDF جديد.

8. طباعة تأكيد

print(f"Watermarked PDF saved as: {output_pdf}")
  • يطبع مسار ملف الإخراج للتأكيد.

ملف الـPDF المدخل، وملف العلامة المائية، وملف الـPDF المدموغ

لقطة شاشة لقطة شاشة لملف PDF مدموغ باستخدام بايثون

الخاتمة

في هذا الدليل، استعرضنا العمليات الأساسية للعمل مع ملفات PDF باستخدام بايثون، بما في ذلك استخراج النصوص، تدوير الصفحات، الدمج، التقسيم، وإضافة العلامات المائية. مع هذه المهارات، يمكنك الآن بناء مدير ملفات PDF خاص بك وأتمتة مختلف المهام المتعلقة بـPDF بكفاءة.