Рад са ПДФ датотекама у Питхон-у

Рад са ПДФ датотекама у Питхон-у

Сви морате знати шта су ПДФ-ови. У ствари, они су један од најважнијих и нашироко коришћених дигиталних медија. ПДФ је скраћеница за Портабле Доцумент Формат . Користи се .пдф проширење. Користи се за представљање и размену докумената поуздано независно од софтверског хардвера или оперативног система.
Инвентед би Адобе ПДФ је сада отворени стандард који одржава Међународна организација за стандардизацију (ИСО). ПДФ-ови могу садржати везе и дугмад у пољу аудио видео и пословне логике.
У овом чланку ћемо научити како можемо да урадимо различите операције као што су:
 

  • Извлачење текста из ПДФ-а
  • Ротирање ПДФ страница
  • Спајање ПДФ-ова
  • Раздвајање ПДФ-а
  • Додавање воденог жига на ПДФ странице

Инсталација: Коришћење једноставних Питхон скрипти!
Користићемо пипдф модул треће стране.
пипдф је питхон библиотека направљена као ПДФ алат. Способан је за:
 

  • Издвајање информација о документу (аутор наслова…)
  • Подела докумената страницу по страницу
  • Спајање докумената страницу по страницу
  • Обрезивање страница
  • Спајање више страница у једну страницу
  • Шифровање и дешифровање ПДФ датотека
  • и више!

Да бисте инсталирали пипдф, покрените следећу команду из командне линије:

 pip install pypdf  

Ово име модула разликује велика и мала слова, па се уверите да је и је мала а све остало велика. Доступни су сви кодови и ПДФ датотеке које се користе у овом водичу/чланку овде .

1. Екстраховање текста из ПДФ датотеке

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')   
  • Овде креирамо објекат од ПдфРеадер класе пипдф модула и проследите путању до ПДФ датотеке и добијете објекат за читање ПДФ-а.
     
 print(len(reader.pages))   
  • странице својство даје број страница у ПДФ датотеци. На пример, у нашем случају то је 20 (погледајте први ред излаза).
     
 pageObj = reader.pages[0]   
  • Сада креирамо објекат од ПагеОбјецт класа пипдф модула. ПДФ читач објекат има функцију странице[] који узима број странице (почевши од индекса 0) као аргумент и враћа објекат странице.
     
 print(pageObj.extract_text())   
  • Објекат странице има функцију екстракт_текста() да бисте издвојили текст са ПДФ странице.


Напомена: Иако су ПДФ датотеке одличне за постављање текста на начин који је људима лак за штампање и читање, софтвер није једноставан за рашчлањивање у обичан текст. Као такав, пипдф може правити грешке приликом издвајања текста из ПДФ-а и чак можда неће моћи да отвори неке ПДФ-ове уопште. Нажалост, не можете много да урадите поводом овога. пипдф можда једноставно неће моћи да ради са неким од ваших конкретних ПДФ датотека.

2. Ротирање ПДФ страница
 

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  ()   

Овде можете видети како је прва страница од ротатед_екампле.пдф изгледа као (десна слика) након ротације:

Ротирање пдф датотеке

Неке важне тачке у вези са горњим кодом:
 

  • За ротацију прво креирамо објекат за читање ПДФ-а оригиналног ПДФ-а.
 writer = PdfWriter()   
  • Ротиране странице ће бити уписане у нови ПДФ. За писање у ПДФ-ове користимо објекат ПдфВритер класа пипдф модула.
 for page in range(len(pdfReader.pages)):   
pageObj = pdfReader.pages[page]
pageObj.rotate(rotation)
writer.add_page(pageObj)
  • Сада понављамо сваку страницу оригиналног ПДФ-а. Добијамо објекат странице .странице[] метод класе ПДФ читач. Сада ротирамо страницу ротирати() метод класе објекта странице. Затим додамо страницу у ПДФ вритер објекат користећи адд() метод класе ПДФ писача прослеђивањем објекта ротиране странице.
 newFile = open(newFileName 'wb')   
writer.write(newFile)
newFile.close()
  • Сада морамо да запишемо ПДФ странице у нову ПДФ датотеку. Прво отварамо нови објекат датотеке и уписујемо ПДФ странице у њега користећи напиши() метод ПДФ писача објекта. На крају затварамо оригинални објекат ПДФ датотеке и нови објекат датотеке.

3. Спајање ПДФ датотека

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  ()   

Резултат горњег програма је комбиновани ПДФ комбиновани_пример.пдф добијене спајањем пример.пдф и ротатед_екампле.пдф .
 

  • Хајде да погледамо важне аспекте овог програма:
     
 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)
  • На крају записујемо ПДФ странице у излазну ПДФ датотеку користећи писати метод ПДФ писача објекта.

4. Раздвајање ПДФ датотеке

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  ()   

Излаз ће бити три нове ПДФ датотеке са сплит 1 (страна 01) сплит 2 (страна 23) сплит 3 (страна 4-енд) .
Ниједна нова функција или класа није коришћена у горњем питхон програму. Користећи једноставну логику и итерације, креирали смо поделе прослеђеног ПДФ-а према проследјеној листи цепања .

5. Додавање воденог жига на ПДФ странице

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  ()   

Ево како изгледа прва страница оригиналне (лево) и воденог жига (десно) ПДФ датотеке:
 

Водени жиг на пдф датотеку

  • Цео процес је исти као у примеру ротације странице. Једина разлика је:
     
 wmpageObj = add_watermark(mywatermark pdfReader.pages[page])   
  • Објекат странице се конвертује у објекат странице са воденим жигом помоћу адд_ватермарк() функција.
  • Хајде да покушамо да разумемо адд_ватермарк() функција:
     
  reader = PdfReader(wmFile)   
pageObj.merge_page(reader.pages[0])
return pageObj
  • Пре свега, креирамо објекат за читање ПДФ-а водени жиг.пдф . До пренесеног објекта странице који користимо спајање_страница() функцију и проследите објекат странице прве странице ПДФ читача воденог жига. Ово ће прекрити водени жиг преко објекта странице.


И овде долазимо до краја овог дугачког туторијала о раду са ПДФ датотекама у Питхон-у.
Сада можете лако да креирате сопствени ПДФ менаџер!
Референце:
 

  • хттпс://аутоматетхеборингстуфф.цом/цхаптер13/
  • хттпс://пипи.орг/пројецт/пипдф/

Ако вам се свиђа ГеексфорГеекс и желите да допринесете, такође можете да напишете чланак користећи врите.геексфоргеекс.орг или да пошаљете свој чланак на адресу ревиев-теам@геексфоргеекс.орг. Погледајте како се ваш чланак појављује на главној страници ГеексфорГеекс-а и помозите другим штреберима.
Молимо вас да напишете коментаре ако нађете нешто нетачно или ако желите да поделите више информација о теми о којој се расправљало изнад.
 

Креирај квиз