כולכם חייבים להכיר מה הם קובצי PDF. למעשה הם אחת המדיה הדיגיטלית החשובה והנפוצה ביותר. PDF מייצג פורמט מסמך נייד . זה משתמש .pdf הַרחָבָה. הוא משמש כדי להציג ולהחליף מסמכים בצורה מהימנה ללא תלות בחומרת תוכנה או מערכת הפעלה.
הומצא על ידי אדובי PDF הוא כעת תקן פתוח המתוחזק על ידי ארגון התקינה הבינלאומי (ISO). קובצי PDF יכולים להכיל קישורים וכפתורים של שדות אודיו וידאו והיגיון עסקי.
במאמר זה נלמד כיצד אנו יכולים לבצע פעולות שונות כמו:
- חילוץ טקסט מ-PDF
- סיבוב דפי PDF
- מיזוג קובצי PDF
- פיצול PDF
- הוספת סימן מים לדפי PDF
הַתקָנָה: שימוש בסקריפטים פשוטים של פיתון!
אנו נשתמש במודול pypdf של צד שלישי.
pypdf היא ספריית פיתון הבנויה כערכת כלים PDF. הוא מסוגל:
- חילוץ מידע על המסמך (כותב הכותרת...)
- פיצול מסמכים עמוד אחר עמוד
- מיזוג מסמכים עמוד אחר עמוד
- חיתוך דפים
- מיזוג עמודים מרובים לדף אחד
- הצפנה ופענוח קבצי PDF
- ועוד!
כדי להתקין pypdf הפעל את הפקודה הבאה משורת הפקודה:
pip install pypdfשם המודול הזה הוא תלוי רישיות אז ודא ש ו הוא אותיות קטנות וכל השאר באותיות גדולות. כל הקוד וקובצי PDF המשמשים במדריך/מאמר זה זמינים כָּאן .
אלגוריתם חיפוש בינארי
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...]
הבה ננסה להבין את הקוד לעיל בחתיכות:
מערך java לרשימה
reader = PdfReader('example.pdf')
- כאן אנו יוצרים אובייקט של PdfReader מחלקה של מודול pypdf והעבירו את הנתיב לקובץ ה-PDF וקבל אובייקט קורא PDF.
print(len(reader.pages))
- דפים מאפיין נותן את מספר העמודים בקובץ ה-PDF. למשל במקרה שלנו זה 20 (ראה שורת פלט ראשונה).
pageObj = reader.pages[0]
- כעת אנו יוצרים אובייקט של PageObject מחלקה של מודול pydf. לאובייקט קורא PDF יש פונקציה דפים[] שלוקח את מספר העמוד (החל מאינדקס 0) כארגומנט ומחזיר את אובייקט העמוד.
print(pageObj.extract_text())
- לאובייקט העמוד יש פונקציה extract_text() כדי לחלץ טקסט מדף ה-PDF.
פֶּתֶק: בעוד שקובצי PDF נהדרים לפריסת טקסט בצורה שקל לאנשים להדפיס ולקרוא, הם לא פשוטים עבור תוכנה לנתח לטקסט רגיל. לפיכך, pypdf עשוי לעשות טעויות בעת חילוץ טקסט מ-PDF ואולי אפילו לא יוכל לפתוח חלק מקובצי PDF כלל. אין הרבה מה לעשות בקשר לזה לצערי. ייתכן ש-pypdf פשוט לא יוכל לעבוד עם חלק מקבצי ה-PDF הספציפיים שלך.
2. סיבוב דפי PDF
# 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 של ה-PDF המקורי.
writer = PdfWriter()
- דפים מסובבים ייכתבו לקובץ PDF חדש. לכתיבה לקובצי PDF אנו משתמשים באובייקט של PdfWriter מחלקה של מודול pydf.
for page in range(len(pdfReader.pages)):
pageObj = pdfReader.pages[page]
pageObj.rotate(rotation)
writer.add_page(pageObj)
- כעת אנו חוזרים על כל עמוד ב-PDF המקורי. אנו מקבלים אובייקט עמוד על ידי .pages[] שיטה של שיעור קורא PDF. כעת אנו מסובבים את הדף לפי לְסוֹבֵב() שיטת מחלקת אובייקט עמוד. לאחר מכן אנו מוסיפים דף לאובייקט כותב PDF באמצעות לְהוֹסִיף() שיטה של מחלקה לכותב PDF על ידי העברת אובייקט העמוד המסובב.
newFile = open(newFileName 'wb')
writer.write(newFile)
newFile.close()
- כעת עלינו לכתוב את דפי ה-PDF לקובץ PDF חדש. ראשית אנו פותחים את אובייקט הקובץ החדש וכותבים אליו דפי PDF באמצעות לִכתוֹב() שיטת אובייקט כותב PDF. לבסוף נסגור את אובייקט קובץ ה-PDF המקורי ואת אובייקט הקובץ החדש.
3. מיזוג קבצי PDF
1 מתוך 1000.00Python
# 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()- למיזוג אנו משתמשים במחלקה בנויה מראש PdfWriter של מודול pydf.
כאן אנו יוצרים אובייקט 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-סוף) .
לא נעשה שימוש בפונקציה או מחלקה חדשה בתוכנית python לעיל. בעזרת לוגיקה ואיטרציות פשוטות יצרנו את הפיצולים של PDF שעבר על פי הרשימה שעברה פיצולים .
פיצול על ידי מיתר Java
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 מקורי (משמאל) ועם סימן מים (מימין):

- כל התהליך זהה לדוגמה של סיבוב העמוד. ההבדל היחיד הוא:
wmpageObj = add_watermark(mywatermark pdfReader.pages[page])
- אובייקט עמוד מומר לאובייקט עמוד עם סימן מים באמצעות add_watermark() פוּנקצִיָה.
- בואו ננסה להבין add_watermark() פוּנקצִיָה:
reader = PdfReader(wmFile)
pageObj.merge_page(reader.pages[0])
return pageObj
- בראש ובראשונה אנו יוצרים אובייקט קורא PDF של watermark.pdf . לאובייקט הדף שעבר בו אנו משתמשים Merge_page() פונקציה והעבירו את אובייקט העמוד של העמוד הראשון של אובייקט קורא סימן המים של PDF. פעולה זו תכסה את סימן המים על אובייקט העמוד שעבר.
והנה הגענו לסוף המדריך הארוך הזה על עבודה עם קבצי PDF ב-python.
עכשיו אתה יכול ליצור בקלות מנהל PDF משלך!
הפניות:
- https://automatetheboringstuff.com/chapter13/
- https://pypi.org/project/pypdf/
אם אתה אוהב את GeeksforGeeks ותרצה לתרום אתה יכול גם לכתוב מאמר באמצעות write.geeksforgeeks.org או לשלוח את המאמר שלך לכתובת [email protected]. ראה את המאמר שלך מופיע בעמוד הראשי של GeeksforGeeks ועזור לגיקים אחרים.
אנא כתוב הערות אם אתה מוצא משהו שגוי או אם אתה רוצה לשתף מידע נוסף על הנושא שנדון לעיל.