Робота з файлами PDF на Python

Робота з файлами PDF на Python

Усі ви повинні знати, що таке PDF-файли. Насправді вони є одними з найважливіших і широко використовуваних цифрових засобів масової інформації. PDF означає Портативний формат документа . Це використовує .pdf розширення. Він використовується для надійного представлення та обміну документами незалежно від програмного забезпечення чи операційної системи.
Винайдено Adobe Зараз PDF є відкритим стандартом, який підтримує Міжнародна організація стандартизації (ISO). PDF-файли можуть містити посилання та кнопки, аудіо, відео та бізнес-логіку.
У цій статті ми дізнаємося, як ми можемо виконувати різні операції, наприклад:
 

  • Вилучення тексту з PDF
  • Обертання сторінок PDF
  • Об'єднання PDF-файлів
  • Розбиття PDF
  • Додавання водяного знака на сторінки PDF

Установка: Використання простих скриптів python!
Ми будемо використовувати сторонній модуль pypdf.
pypdf — це бібліотека Python, створена як інструментарій 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...]

Давайте спробуємо зрозуміти наведений вище код частинами:
 

 reader = PdfReader('example.pdf')   
  • Тут ми створюємо об’єкт PdfReader класу модуля pypdf і передати шлях до файлу PDF і отримати об’єкт читача PDF.
     
 print(len(reader.pages))   
  • сторінки властивість визначає кількість сторінок у файлі PDF. Наприклад, у нашому випадку це 20 (див. перший рядок виводу).
     
 pageObj = reader.pages[0]   
  • Тепер ми створюємо об'єкт PageObject клас модуля pypdf. Об’єкт читання PDF має функцію сторінки[] який приймає номер сторінки (починаючи з індексу 0) як аргумент і повертає об’єкт сторінки.
     
 print(pageObj.extract_text())   
  • Об'єкт сторінки має функцію extract_text() щоб отримати текст зі сторінки PDF.


Примітка: Хоча PDF-файли чудово підходять для розміщення тексту таким чином, щоб людям було легко його друкувати та читати, програмному забезпеченню непросто розібрати їх у відкритий текст. Таким чином, pypdf може робити помилки під час видобування тексту з PDF-файлу і навіть може взагалі не відкривати деякі PDF-файли. На жаль, ви не так багато можете зробити. pypdf може просто не працювати з деякими з ваших PDF-файлів.

2. Обертання сторінок PDF
 

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 файлу

Деякі важливі моменти, пов’язані з наведеним вище кодом:
 

  • Для обертання ми спочатку створюємо об’єкт читання PDF оригінального PDF.
 writer = PdfWriter()   
  • Повернуті сторінки будуть записані в новий PDF-файл. Для запису в PDF ми використовуємо об’єкт of PdfWriter клас модуля pypdf.
 for page in range(len(pdfReader.pages)):   
pageObj = pdfReader.pages[page]
pageObj.rotate(rotation)
writer.add_page(pageObj)
  • Тепер ми повторюємо кожну сторінку оригінального PDF-файлу. Ми отримуємо об'єкт сторінки .pages[] метод класу PDF reader. Тепер ми повертаємо сторінку на обертати () метод класу об'єктів сторінки. Потім ми додаємо сторінку до об’єкта PDF writer за допомогою додати() метод класу запису 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-файл об'єднаний_приклад.pdf отримані шляхом злиття приклад.pdf і rotated_example.pdf .
 

  • Давайте розглянемо важливі аспекти цієї програми:
     
 pdfWriter = PdfWriter()  
  • Для злиття ми використовуємо попередньо зібраний клас PdfWriter модуля pypdf.
    Тут ми створюємо об'єкт pdfwriter класу PDF writer
  # 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  (  start    end  ):   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   =   [  2    4  ]   # 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 відповідно до списку пройдених розколюється .

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

  • Весь процес такий самий, як у прикладі ротації сторінки. Єдина різниця:
     
 wmpageObj = add_watermark(mywatermark pdfReader.pages[page])   
  • Об’єкт сторінки перетворюється на об’єкт сторінки з водяним знаком за допомогою add_watermark() функція.
  • Давайте спробуємо розібратися add_watermark() функція:
     
  reader = PdfReader(wmFile)   
pageObj.merge_page(reader.pages[0])
return pageObj
  • Перш за все ми створюємо об’єкт для читання PDF водяний знак.pdf . До переданого об'єкта сторінки використовуємо merge_page() і передати об’єкт сторінки першої сторінки об’єкта читача PDF із водяним знаком. Це накладе водяний знак на переданий об’єкт сторінки.


І ось ми підійшли до кінця цього довгого посібника з роботи з PDF-файлами в Python.
Тепер ви можете легко створити власний PDF-менеджер!
Література:
 

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

Якщо вам подобається GeeksforGeeks і ви хочете зробити свій внесок, ви також можете написати статтю за допомогою write.geeksforgeeks.org або надіслати свою статтю на адресу [email protected]. Перегляньте свою статтю на головній сторінці GeeksforGeeks і допоможіть іншим гікам.
Будь ласка, пишіть коментарі, якщо ви знайшли щось невірне або якщо ви хочете поділитися додатковою інформацією про тему, розглянуту вище.
 

Створіть вікторину

Кращі Статті

Категорія