logo

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

يجب أن تكونوا جميعًا على دراية بماهية ملفات PDF. في الواقع، فهي واحدة من أهم الوسائط الرقمية وأكثرها استخدامًا. PDF لتقف على تنسيق المستندات المحمولة . يستخدم .pdf امتداد. يتم استخدامه لتقديم المستندات وتبادلها بشكل مستقل عن الأجهزة البرمجية أو نظام التشغيل.
اخترع بواسطة أدوبي أصبح PDF الآن معيارًا مفتوحًا تحتفظ به المنظمة الدولية للمعايير (ISO). يمكن أن تحتوي ملفات PDF على روابط وأزرار وحقول الصوت والفيديو ومنطق الأعمال.
في هذه المقالة سوف نتعلم كيف يمكننا القيام بعمليات مختلفة مثل:
 

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

تثبيت: باستخدام نصوص بايثون البسيطة!
سنستخدم وحدة pypdf لجهة خارجية.
pypdf هي مكتبة بايثون تم إنشاؤها كمجموعة أدوات PDF. إنها قادرة على:
 

  • استخراج معلومات الوثيقة (عنوان المؤلف...)
  • تقسيم المستندات صفحة بعد صفحة
  • دمج المستندات صفحة تلو الأخرى
  • صفحات الاقتصاص
  • دمج عدة صفحات في صفحة واحدة
  • تشفير وفك تشفير ملفات PDF
  • وأكثر!

لتثبيت pypdf، قم بتشغيل الأمر التالي من سطر الأوامر:



pip install pypdf

اسم الوحدة هذا حساس لحالة الأحرف، لذا تأكد من أن و هو صغير وكل شيء آخر هو كبير. جميع التعليمات البرمجية وملفات PDF المستخدمة في هذا البرنامج التعليمي/المقالة متاحة هنا .

nullpointerexception

1. استخراج النص من ملف PDF

Python
# importing required classes from pypdf import PdfReader # creating a pdf reader object reader = PdfReader('example.pdf') # printing number of pages in pdf file print(len(reader.pages)) # creating a page object page = reader.pages[0] # extracting text from page print(page.extract_text()) 

يبدو إخراج البرنامج أعلاه كما يلي:
 

20  
PythonBasics
S.R.Doty
August272008
Contents

1Preliminaries
4
1.1WhatisPython?...................................
..4
1.2Installationanddocumentation....................
.........4 [and some more lines...]

دعونا نحاول فهم الكود أعلاه في أجزاء:
 

reader = PdfReader('example.pdf')  
  • هنا نقوم بإنشاء كائن قارئ PDF فئة وحدة pypdf وتمرير المسار إلى ملف PDF والحصول على كائن قارئ PDF.
     
print(len(reader.pages))  
  • الصفحات الخاصية تعطي عدد الصفحات في ملف PDF. على سبيل المثال، في حالتنا هو 20 (انظر السطر الأول من الإخراج).
     
pageObj = reader.pages[0]  
  • الآن نقوم بإنشاء كائن كائن الصفحة فئة وحدة pypdf. كائن قارئ PDF له وظيفة الصفحات[] الذي يأخذ رقم الصفحة (بدءًا من الفهرس 0) كوسيطة ويعيد كائن الصفحة.
     
print(pageObj.extract_text())  
  • كائن الصفحة لديه وظيفة extract_text() لاستخراج النص من صفحة PDF.


ملحوظة: على الرغم من أن ملفات PDF رائعة لتخطيط النص بطريقة يسهل على الأشخاص طباعتها وقراءتها، إلا أنه ليس من السهل على البرامج تحليلها إلى نص عادي. على هذا النحو، قد يرتكب pypdf أخطاء عند استخراج النص من ملف PDF وقد لا يتمكن من فتح بعض ملفات PDF على الإطلاق. ليس هناك الكثير مما يمكنك فعله حيال ذلك لسوء الحظ. قد يكون pypdf ببساطة غير قادر على العمل مع بعض ملفات PDF الخاصة بك.

2. تدوير صفحات PDF
 

1nf 2nf 3nf
Python
# importing the required classes from pypdf import PdfReader PdfWriter def PDFrotate(origFileName newFileName rotation): # creating a pdf Reader object reader = PdfReader(origFileName) # creating a pdf writer object for new pdf writer = PdfWriter() # rotating each page for page in range(len(reader.pages)): pageObj = reader.pages[page] pageObj.rotate(rotation) # Add the rotated page object to the PDF writer writer.add_page(pageObj) # Write the rotated pages to the new PDF file with open(newFileName 'wb') as newFile: writer.write(newFile) def main(): # original pdf file name origFileName = 'example.pdf' # new pdf file name newFileName = 'rotated_example.pdf' # rotation angle rotation = 270 # calling the PDFrotate function PDFrotate(origFileName newFileName rotation) if __name__ == '__main__': # calling the main function main() 

هنا يمكنك أن ترى كيف أن الصفحة الأولى من Rotated_example.pdf يبدو (الصورة اليمنى) بعد التدوير:

تدوير ملف pdf' title=

بعض النقاط المهمة المتعلقة بالكود أعلاه:
 

  • للتدوير، نقوم أولاً بإنشاء كائن قارئ PDF لملف PDF الأصلي.
writer = PdfWriter()  
  • ستتم كتابة الصفحات التي تم تدويرها إلى ملف PDF جديد. للكتابة إلى ملفات PDF نستخدم كائن كاتب PDF فئة وحدة pypdf.
for page in range(len(pdfReader.pages)):  
pageObj = pdfReader.pages[page]
pageObj.rotate(rotation)
writer.add_page(pageObj)
  • نقوم الآن بتكرار كل صفحة من ملف PDF الأصلي. نحصل على كائن الصفحة بواسطة .الصفحات[] طريقة فئة قارئ PDF. الآن نقوم بتدوير الصفحة تناوب() طريقة فئة كائن الصفحة. ثم نضيف صفحة إلى كائن كاتب PDF باستخدام يضيف() طريقة فئة الكاتب PDF عن طريق تمرير كائن الصفحة التي تم تدويرها.
newFile = open(newFileName 'wb')  
writer.write(newFile)
newFile.close()
  • علينا الآن كتابة صفحات PDF في ملف PDF جديد. أولاً نفتح كائن الملف الجديد ونكتب صفحات PDF إليه باستخدامه يكتب() طريقة كائن الكاتب PDF. أخيرًا نقوم بإغلاق كائن ملف PDF الأصلي وكائن الملف الجديد.

3. دمج ملفات PDF

Python
# importing required modules from pypdf import PdfWriter def PDFmerge(pdfs output): # creating pdf file writer object pdfWriter = PdfWriter() # appending pdfs one by one for pdf in pdfs: pdfWriter.append(pdf) # writing combined pdf to output pdf file with open(output 'wb') as f: pdfWriter.write(f) def main(): # pdf files to merge pdfs = ['example.pdf' 'rotated_example.pdf'] # output pdf file name output = 'combined_example.pdf' # calling pdf merge function PDFmerge(pdfs=pdfs output=output) if __name__ == '__main__': # calling the main function main() 

إخراج البرنامج أعلاه هو ملف PDF مدمج Combined_example.pdf تم الحصول عليها عن طريق الدمج example.pdf و Rotated_example.pdf .
 

ج # البرنامج التعليمي
  • دعونا نلقي نظرة على الجوانب الهامة لهذا البرنامج:
     
pdfWriter = PdfWriter()
  • للدمج نستخدم فئة مبنية مسبقًا كاتب PDF من وحدة pypdf.
    هنا نقوم بإنشاء كائن pdfwriter فئة الكاتب PDF
 # appending pdfs one by one  
for pdf in pdfs:
pdfWriter.append(pdf)
  • نقوم الآن بإلحاق كائن ملف لكل كائن PDF إلى كائن كاتب PDF باستخدام ملف إلحاق () طريقة.
 # writing combined pdf to output pdf file  
with open(output 'wb') as f:
pdfWriter.write(f)
  • أخيرًا نكتب صفحات PDF إلى ملف PDF الناتج باستخدام يكتب طريقة كائن الكاتب PDF.

4. تقسيم ملف PDF

Python
# importing the required modules from pypdf import PdfReader PdfWriter def PDFsplit(pdf splits): # creating pdf reader object reader = PdfReader(pdf) # starting index of first slice start = 0 # starting index of last slice end = splits[0] for i in range(len(splits)+1): # creating pdf writer object for (i+1)th split writer = PdfWriter() # output pdf file name outputpdf = pdf.split('.pdf')[0] + str(i) + '.pdf' # adding pages to pdf writer object for page in range(startend): writer.add_page(reader.pages[page]) # writing split pdf pages to pdf file with open(outputpdf 'wb') as f: writer.write(f) # interchanging page split start position for next split start = end try: # setting split end position for next split end = splits[i+1] except IndexError: # setting split end position for last split end = len(reader.pages) def main(): # pdf file to split pdf = 'example.pdf' # split page positions splits = [24] # calling PDFsplit function to split pdf PDFsplit(pdf splits) if __name__ == '__main__': # calling the main function main() 

سيكون الناتج ثلاثة ملفات PDF جديدة القسم 1 (الصفحة 01) القسم 2 (الصفحة 23) القسم 3 (الصفحة 4 - النهاية) .
لم يتم استخدام أي وظيفة أو فئة جديدة في برنامج بايثون أعلاه. باستخدام المنطق والتكرارات البسيطة، قمنا بإنشاء تقسيمات لملف PDF الذي تم تمريره وفقًا للقائمة التي تم تمريرها انشقاقات .

فرز الفقاعة في الخوارزمية

5. إضافة علامة مائية إلى صفحات PDF

Python
# importing the required modules from pypdf import PdfReader PdfWriter def add_watermark(wmFile pageObj): # creating pdf reader object of watermark pdf file reader = PdfReader(wmFile) # merging watermark pdf's first page with passed page object. pageObj.merge_page(reader.pages[0]) # returning watermarked page object return pageObj def main(): # watermark pdf file name mywatermark = 'watermark.pdf' # original pdf file name origFileName = 'example.pdf' # new pdf file name newFileName = 'watermarked_example.pdf' # creating pdf File object of original pdf pdfFileObj = open(origFileName 'rb') # creating a pdf Reader object reader = PdfReader(pdfFileObj) # creating a pdf writer object for new pdf writer = PdfWriter() # adding watermark to each page for page in range(len(reader.pages)): # creating watermarked page object wmpageObj = add_watermark(mywatermark reader.pages[page]) # adding watermarked page object to pdf writer writer.add_page(wmpageObj) # writing watermarked pages to new file with open(newFileName 'wb') as newFile: writer.write(newFile) # closing the original pdf file object pdfFileObj.close() if __name__ == '__main__': # calling the main function main() 

إليك كيف تبدو الصفحة الأولى من ملف PDF الأصلي (يسار) والعلامة المائية (يمين):
 

وضع علامة مائية على ملف pdf' loading='lazy' title=

  • كل العملية هي نفس مثال تدوير الصفحة. الفرق الوحيد هو :
     
wmpageObj = add_watermark(mywatermark pdfReader.pages[page])  
  • يتم تحويل كائن الصفحة إلى كائن صفحة يحمل علامة مائية باستخدام add_watermark() وظيفة.
  • دعونا نحاول أن نفهم add_watermark() وظيفة:
     
 reader = PdfReader(wmFile)  
pageObj.merge_page(reader.pages[0])
return pageObj
  • قبل كل شيء نقوم بإنشاء كائن قارئ PDF العلامة المائية.pdf . إلى كائن الصفحة الذي تم تمريره الذي نستخدمه دمج_الصفحة() وظيفة وتمرير كائن الصفحة للصفحة الأولى من كائن قارئ PDF للعلامة المائية. سيؤدي هذا إلى تراكب العلامة المائية فوق كائن الصفحة الذي تم تمريره.


وهنا نصل إلى نهاية هذا البرنامج التعليمي الطويل حول العمل مع ملفات PDF في بايثون.
الآن يمكنك بسهولة إنشاء مدير PDF الخاص بك!
مراجع:
 

  • https://automatetheboringstuff.com/chapter13/
  • https://pypi.org/project/pypdf/

إذا كنت تحب GeeksforGeeks وترغب في المساهمة، يمكنك أيضًا كتابة مقال باستخدام write.geeksforgeeks.org أو إرسال مقالتك بالبريد إلى [email protected]. شاهد مقالتك التي تظهر على صفحة GeeksforGeeks الرئيسية وساعد المهوسون الآخرين.
يرجى كتابة التعليقات إذا وجدت أي شيء غير صحيح أو إذا كنت ترغب في مشاركة المزيد من المعلومات حول الموضوع الذي تمت مناقشته أعلاه.
 

إنشاء اختبار