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

في هذه المقالة، سنرشدك إلى كيفية العمل مع ملفات PDF باستخدام بايثون. سنستخدم مكتبة pypdf.
باستخدام مكتبة pypdf، سنوضح كيفية تنفيذ عمليات متنوعة في بايثون مثل:
- استخراج النصوص من ملفات 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 المدخل: رابط التحميل
- ملف 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 المدمج الناتج
- ملفات PDF المدخلة: رابط التحميل
- ملف PDF المدمج الناتج: رابط التحميل
4. تقسيم ملف PDF باستخدام بايثون
شرح الكود
تقوم الشفرة أعلاه بتقسيم ملف PDF إلى صفحات منفصلة باستخدام مكتبة PyPDF. في البداية، تتأكد الشفرة من أن مجلد الإخراج موجود، ثم تقرأ ملف الـPDF المدخل. وتكرارًا على كل صفحة، تنشئ الشفرة كائن PdfWriter جديدًا وتخزن كل صفحة كملف PDF فردي. يتم تسمية ملفات الإخراج بشكل تسلسلي (مثل page_1.pdf، page_2.pdf) وتخزن في مجلد output-dir
. وأخيرًا، تطبع الشفرة رسالة تأكيد لكل ملف تم إنشاؤه وتخبر عند انتهاء العملية.
ملف PDF المدخل وملفات الإخراج المنقسمة
- ملف 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 باستخدام بايثون، بما في ذلك استخراج النصوص، تدوير الصفحات، الدمج، التقسيم، وإضافة العلامات المائية. مع هذه المهارات، يمكنك الآن بناء مدير ملفات PDF خاص بك وأتمتة مختلف المهام المتعلقة بـPDF بكفاءة.