Práca so súbormi PDF v Pythone

Práca so súbormi PDF v Pythone

Všetci musíte byť oboznámení s tým, čo sú súbory PDF. V skutočnosti sú jedným z najdôležitejších a najpoužívanejších digitálnych médií. PDF znamená Formát prenosného dokumentu . Používa sa .pdf rozšírenie. Používa sa na prezentáciu a výmenu dokumentov spoľahlivo nezávisle od softvérového hardvéru alebo operačného systému.
Vynašiel Adobe PDF je teraz otvorený štandard udržiavaný Medzinárodnou organizáciou pre štandardizáciu (ISO). Súbory PDF môžu obsahovať odkazy a tlačidlá v poliach zvuku, videa a obchodnej logiky.
V tomto článku sa dozvieme, ako môžeme vykonávať rôzne operácie, ako napríklad:
 

  • Extrahovanie textu z PDF
  • Otáčanie stránok PDF
  • Zlúčenie súborov PDF
  • Rozdelenie PDF
  • Pridanie vodoznaku na stránky PDF

Inštalácia: Používanie jednoduchých python skriptov!
Budeme používať modul tretej strany pypdf.
pypdf je knižnica pythonu vytvorená ako súbor nástrojov PDF. Je schopný:
 

  • Extrahovanie informácií o dokumente (autor názvu…)
  • Rozdelenie dokumentov stránku po strane
  • Zlúčenie dokumentov stránku po stránke
  • Orezanie strán
  • Zlúčenie viacerých stránok do jednej stránky
  • Šifrovanie a dešifrovanie súborov PDF
  • a ďalšie!

Ak chcete nainštalovať pypdf, spustite nasledujúci príkaz z príkazového riadku:

 pip install pypdf  

Tento názov modulu rozlišuje malé a veľké písmená, takže sa uistite, že a je malé a všetko ostatné je veľké. Všetky kódy a súbory PDF použité v tomto návode/článku sú k dispozícii tu .

1. Extrahovanie textu zo súboru 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  ())   

Výstup vyššie uvedeného programu vyzerá takto:
 

 20   
PythonBasics
S.R.Doty
August272008
Contents

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

Pokúsme sa porozumieť vyššie uvedenému kódu v kúskoch:
 

 reader = PdfReader('example.pdf')   
  • Tu vytvoríme objekt o PdfReader triedy modulu pypdf a odovzdajte cestu k súboru PDF a získajte objekt čítačky PDF.
     
 print(len(reader.pages))   
  • stránky vlastnosť udáva počet strán v súbore PDF. Napríklad v našom prípade je to 20 (pozri prvý riadok výstupu).
     
 pageObj = reader.pages[0]   
  • Teraz vytvoríme objekt PageObject triedy modulu pypdf. Objekt čítačky PDF má funkciu strany[] ktorý prevezme číslo stránky (začínajúc od indexu 0) ako argument a vráti objekt stránky.
     
 print(pageObj.extract_text())   
  • Objekt stránky má funkciu extrakt_text() extrahovať text zo stránky PDF.


Poznámka: Aj keď sú súbory PDF skvelé na rozloženie textu spôsobom, ktorý si ľudia ľahko vytlačia a prečítajú, nie sú jednoduché pre softvér na analýzu do obyčajného textu. Ako taký môže pypdf robiť chyby pri extrakcii textu z PDF a dokonca nemusí byť možné niektoré súbory PDF vôbec otvoriť. Bohužiaľ s tým nemôžete veľa urobiť. pypdf môže jednoducho byť neschopný pracovať s niektorými vašimi konkrétnymi súbormi PDF.

2. Otáčanie stránok 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  ()   

Tu môžete vidieť, ako na prvej strane otočený_príklad.pdf po otočení vyzerá takto (pravý obrázok):

Otočenie súboru pdf

Niektoré dôležité body súvisiace s vyššie uvedeným kódom:
 

  • Pre rotáciu najprv vytvoríme objekt PDF Reader z pôvodného PDF.
 writer = PdfWriter()   
  • Otočené strany sa zapíšu do nového PDF. Na zápis do PDF používame objekt PdfWriter triedy modulu pypdf.
 for page in range(len(pdfReader.pages)):   
pageObj = pdfReader.pages[page]
pageObj.rotate(rotation)
writer.add_page(pageObj)
  • Teraz iterujeme každú stránku pôvodného PDF. Dostaneme objekt stránky pomocou .stránky[] metóda triedy PDF Reader. Teraz otočíme stránku o otočiť () metóda triedy objektu stránky. Potom pridáme stránku do objektu PDF Writer pomocou pridať () metóda triedy PDF Writer odovzdaním objektu otočenej stránky.
 newFile = open(newFileName 'wb')   
writer.write(newFile)
newFile.close()
  • Teraz musíme zapísať stránky PDF do nového súboru PDF. Najprv otvoríme nový objekt súboru a pomocou neho napíšeme stránky PDF písať () metóda objektu PDF Writer. Nakoniec zatvoríme pôvodný objekt súboru PDF a nový objekt súboru.

3. Zlúčenie súborov 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  ()   

Výstupom vyššie uvedeného programu je kombinované PDF kombinovaný_príklad.pdf získané zlúčením priklad.pdf a otočený_príklad.pdf .
 

  • Pozrime sa na dôležité aspekty tohto programu:
     
 pdfWriter = PdfWriter()  
  • Na zlúčenie používame vopred vybudovanú triedu PdfWriter modulu pypdf.
    Tu vytvoríme objekt pdfwriter triedy PDF Writer
  # appending pdfs one by one   
for pdf in pdfs:
pdfWriter.append(pdf)
  • Teraz pripojíme objekt súboru každého PDF k objektu PDF Writer pomocou pripojiť () metóda.
  # writing combined pdf to output pdf file   
with open(output 'wb') as f:
pdfWriter.write(f)
  • Nakoniec zapíšeme stránky PDF do výstupného súboru PDF pomocou písať metóda objektu PDF Writer.

4. Rozdelenie súboru 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  ()   

Výstupom budú tri nové súbory PDF s rozdelenie 1 (strana 01) rozdelenie 2 (strana 23) rozdelenie 3 (koniec strany 4) .
Vo vyššie uvedenom programe python nebola použitá žiadna nová funkcia alebo trieda. Pomocou jednoduchej logiky a iterácií sme vytvorili rozdelenia odovzdaného PDF podľa odovzdaného zoznamu rozdelí .

5. Pridanie vodoznaku na stránky 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  ()   

Takto vyzerá prvá strana pôvodného (vľavo) a vodoznaku (vpravo) súboru PDF:
 

Vodoznak do súboru pdf

  • Celý proces je rovnaký ako v príklade rotácie stránky. Jediný rozdiel je:
     
 wmpageObj = add_watermark(mywatermark pdfReader.pages[page])   
  • Objekt stránky sa prevedie na objekt stránky s vodotlačou pomocou pridať_vodoznak() funkciu.
  • Skúsme pochopiť pridať_vodoznak() funkcia:
     
  reader = PdfReader(wmFile)   
pageObj.merge_page(reader.pages[0])
return pageObj
  • V prvom rade vytvoríme objekt čítačky PDF vodoznak.pdf . K odovzdanému objektu stránky, ktorý používame merge_page() a odovzdať objekt stránky prvej strany vodoznakového objektu PDF Reader. Toto prekryje vodoznak cez objekt prechádzajúcej strany.


A tu sa dostávame na koniec tohto dlhého tutoriálu o práci so súbormi PDF v pythone.
Teraz si môžete ľahko vytvoriť svojho vlastného správcu PDF!
Referencie:
 

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

Ak máte radi GeeksforGeeks a chceli by ste prispieť, môžete tiež napísať článok pomocou write.geeksforgeeks.org alebo poslať svoj článok na [email protected]. Pozrite si, ako sa váš článok zobrazuje na hlavnej stránke GeeksforGeeks a pomôžte ostatným Geeks.
Napíšte komentáre, ak nájdete niečo nesprávne alebo ak chcete zdieľať viac informácií o téme diskutovanej vyššie.
 

Vytvoriť kvíz