Darbs ar PDF failiem programmā Python

Darbs ar PDF failiem programmā Python

Jums visiem ir jāzina, kas ir PDF faili. Patiesībā tie ir viens no svarīgākajiem un visplašāk izmantotajiem digitālajiem medijiem. PDF apzīmē Portatīvā dokumenta formāts . Tā izmanto .pdf pagarinājumu. To izmanto, lai droši prezentētu un apmainītos ar dokumentiem neatkarīgi no programmatūras aparatūras vai operētājsistēmas.
Izgudroja Adobe PDF tagad ir atvērts standarts, ko uztur Starptautiskā standartizācijas organizācija (ISO). PDF failos var būt saites un pogas, kas veido audio video un biznesa loģikas laukus.
Šajā rakstā mēs uzzināsim, kā mēs varam veikt dažādas darbības, piemēram:
 

  • Teksta izvilkšana no PDF
  • Rotējošas PDF lapas
  • PDF failu sapludināšana
  • PDF sadalīšana
  • Ūdenszīmes pievienošana PDF lapām

Uzstādīšana: Izmantojot vienkāršus python skriptus!
Mēs izmantosim trešās puses moduļa pypdf.
pypdf ir Python bibliotēka, kas izveidota kā PDF rīkkopa. Tas spēj:
 

  • Notiek dokumenta informācijas izvilkšana (nosaukuma autors…)
  • Dokumentu sadalīšana pa lappusēm
  • Dokumentu sapludināšana pa lappusei
  • Lapu apgriešana
  • Vairāku lapu sapludināšana vienā lapā
  • PDF failu šifrēšana un atšifrēšana
  • un vēl vairāk!

Lai instalētu pypdf, komandrindā palaidiet šādu komandu:

 pip install pypdf  

Šis moduļa nosaukums ir reģistrjutīgs, tāpēc pārliecinieties, vai un ir mazie un viss pārējais ir lielie. Ir pieejami visi šajā apmācībā/rakstā izmantotie kodi un PDF faili šeit .

1. Teksta izvilkšana no PDF faila

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

Iepriekš minētās programmas izvade izskatās šādi:
 

 20   
PythonBasics
S.R.Doty
August272008
Contents

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

Mēģināsim saprast iepriekš minēto kodu pa daļām:
 

 reader = PdfReader('example.pdf')   
  • Šeit mēs izveidojam objektu PdfReader pypdf moduļa klases un nododiet ceļu uz PDF failu un iegūstiet PDF lasītāja objektu.
     
 print(len(reader.pages))   
  • lapas rekvizīts norāda PDF faila lappušu skaitu. Piemēram, mūsu gadījumā tas ir 20 (skatiet pirmo izvades rindiņu).
     
 pageObj = reader.pages[0]   
  • Tagad mēs izveidojam objektu Lapas objekts pypdf moduļa klase. PDF lasītāja objektam ir funkcija lapas[] kas izmanto lapas numuru (sākot no indeksa 0) kā argumentu un atgriež lapas objektu.
     
 print(pageObj.extract_text())   
  • Lapas objektam ir funkcija ekstrakts_teksts() lai izvilktu tekstu no PDF lapas.


Piezīme: Lai gan PDF faili ir lieliski piemēroti teksta izkārtojumam tā, lai cilvēki to varētu viegli izdrukāt un lasīt, tos programmatūrai nav vienkārši parsēt vienkāršā tekstā. Tādējādi pypdf var kļūdīties, izvelkot tekstu no PDF faila, un pat nevarēs atvērt dažus PDF failus. Diemžēl jūs nevarat daudz darīt šajā jautājumā. pypdf, iespējams, vienkārši nevar strādāt ar dažiem jūsu konkrētajiem PDF failiem.

2. Rotējošas PDF lapas
 

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

Šeit jūs varat redzēt, kā pirmajā lapā rotated_example.pdf izskatās (attēls labajā pusē) pēc pagriešanas:

Pdf faila pagriešana

Daži svarīgi punkti saistībā ar iepriekš minēto kodu:
 

  • Rotācijai mēs vispirms izveidojam sākotnējā PDF PDF lasītāja objektu.
 writer = PdfWriter()   
  • Pagrieztās lapas tiks ierakstītas jaunā PDF failā. Rakstīšanai PDF failos mēs izmantojam objektu PdfWriter pypdf moduļa klase.
 for page in range(len(pdfReader.pages)):   
pageObj = pdfReader.pages[page]
pageObj.rotate(rotation)
writer.add_page(pageObj)
  • Tagad mēs atkārtojam katru sākotnējā PDF lapu. Mēs iegūstam lapas objektu ar .pages[] PDF lasītāja klases metode. Tagad mēs pagriežam lapu par pagriezt () lapas objektu klases metode. Pēc tam mēs pievienojam lapu PDF rakstīšanas objektam, izmantojot pievienot () PDF rakstīšanas klases metode, nododot pagriezto lapas objektu.
 newFile = open(newFileName 'wb')   
writer.write(newFile)
newFile.close()
  • Tagad mums ir jāraksta PDF lapas jaunā PDF failā. Vispirms atveram jauno faila objektu un ar to ierakstām PDF lapas rakstīt () PDF rakstīšanas objekta metode. Visbeidzot mēs aizveram sākotnējo PDF faila objektu un jauno faila objektu.

3. PDF failu sapludināšana

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

Iepriekš minētās programmas rezultāts ir apvienots PDF fails kombinētais_piemērs.pdf iegūti apvienojot example.pdf un rotated_example.pdf .
 

  • Apskatīsim šīs programmas svarīgos aspektus:
     
 pdfWriter = PdfWriter()  
  • Apvienošanai mēs izmantojam iepriekš izveidotu klasi PdfWriter pypdf modulis.
    Šeit mēs izveidojam objektu pdfwriter PDF rakstītāju klasē
  # appending pdfs one by one   
for pdf in pdfs:
pdfWriter.append(pdf)
  • Tagad mēs pievienojam katra PDF faila objektu PDF rakstīšanas objektam, izmantojot pievienot () metodi.
  # writing combined pdf to output pdf file   
with open(output 'wb') as f:
pdfWriter.write(f)
  • Visbeidzot mēs rakstām PDF lapas izvades PDF failā, izmantojot rakstīt PDF rakstīšanas objekta metode.

4. PDF faila sadalīšana

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

Izvade būs trīs jauni PDF faili ar sadalīšana 1 (lappuse 01) split 2 (lappuse 23) split 3 (lappuse 4-end) .
Iepriekš minētajā python programmā nav izmantota neviena jauna funkcija vai klase. Izmantojot vienkāršu loģiku un iterācijas, mēs izveidojām nodoto PDF sadalījumus atbilstoši nokārtoto sarakstu sadalās .

5. Ūdenszīmes pievienošana PDF lapām

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

Lūk, kā izskatās sākotnējā (pa kreisi) un ūdenszīmes (labajā) PDF faila pirmā lapa:
 

Ūdenszīme pdf failam

  • Viss process ir tāds pats kā lapas rotācijas piemērā. Vienīgā atšķirība ir:
     
 wmpageObj = add_watermark(mywatermark pdfReader.pages[page])   
  • Lapas objekts tiek pārveidots par lapas objektu ar ūdenszīmi, izmantojot add_watermark() funkciju.
  • Mēģināsim saprast add_watermark() funkcija:
     
  reader = PdfReader(wmFile)   
pageObj.merge_page(reader.pages[0])
return pageObj
  • Pirmkārt, mēs izveidojam PDF lasītāja objektu ūdenszīme.pdf . Uz nodoto lapas objektu mēs izmantojam sapludināt_lapu() funkciju un nododiet ūdenszīmes PDF lasītāja objekta pirmās lapas lapas objektu. Tādējādi ūdenszīme tiks pārklāta pār nodoto lapas objektu.


Un šeit mēs sasniedzam šīs garās apmācības par darbu ar PDF failiem programmā python beigas.
Tagad jūs varat viegli izveidot savu PDF pārvaldnieku!
Atsauces:
 

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

Ja jums patīk GeeksforGeeks un vēlaties sniegt savu ieguldījumu, varat arī uzrakstīt rakstu, izmantojot write.geeksforgeeks.org, vai nosūtīt savu rakstu uz e-pastu [email protected]. Skatiet savu rakstu GeeksforGeeks galvenajā lapā un palīdziet citiem Geeks.
Lūdzu, rakstiet komentārus, ja atrodat kaut ko nepareizu vai vēlaties dalīties ar plašāku informāciju par iepriekš apspriesto tēmu.
 

Izveidojiet viktorīnu