Delo z datotekami PDF v Pythonu

Delo z datotekami PDF v Pythonu

Vsi morate vedeti, kaj so PDF-ji. Pravzaprav so eden najpomembnejših in najbolj razširjenih digitalnih medijev. PDF pomeni Prenosni format dokumenta . Uporablja se .pdf razširitev. Uporablja se za zanesljivo predstavitev in izmenjavo dokumentov, neodvisno od strojne programske opreme ali operacijskega sistema.
Izumil Adobe PDF je zdaj odprt standard, ki ga vzdržuje Mednarodna organizacija za standardizacijo (ISO). PDF-ji lahko vsebujejo povezave in gumbe iz polj, avdio videa in poslovne logike.
V tem članku se bomo naučili, kako lahko izvajamo različne operacije, kot so:
 

  • Pridobivanje besedila iz PDF-ja
  • Vrtenje strani PDF
  • Združevanje datotek PDF
  • Razdelitev PDF
  • Dodajanje vodnega žiga na strani PDF

Namestitev: Uporaba preprostih skriptov python!
Uporabili bomo modul tretje osebe pypdf.
pypdf je knjižnica python, zgrajena kot komplet orodij PDF. Sposoben je:
 

  • Pridobivanje informacij o dokumentu (naslov avtorja ...)
  • Razdelitev dokumentov po straneh
  • Spajanje dokumentov stran za stranjo
  • Obrezovanje strani
  • Spajanje več strani v eno stran
  • Šifriranje in dešifriranje datotek PDF
  • in več!

Če želite namestiti pypdf, zaženite naslednji ukaz iz ukazne vrstice:

 pip install pypdf  

To ime modula razlikuje med velikimi in malimi črkami, zato se prepričajte, da je in je z malimi črkami in vse ostalo je z velikimi črkami. Na voljo so vsa koda in datoteke PDF, uporabljene v tej vadnici/članku tukaj .

1. Ekstrahiranje besedila iz datoteke 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  ())   

Rezultat zgornjega programa je videti takole:
 

 20   
PythonBasics
S.R.Doty
August272008
Contents

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

Poskusimo razumeti zgornjo kodo v delih:
 

 reader = PdfReader('example.pdf')   
  • Tukaj ustvarimo predmet PdfReader razreda modula pypdf in posredujte pot do datoteke PDF ter pridobite objekt bralnika PDF.
     
 print(len(reader.pages))   
  • strani podaja število strani v datoteki PDF. Na primer, v našem primeru je 20 (glejte prvo vrstico izpisa).
     
 pageObj = reader.pages[0]   
  • Zdaj ustvarimo predmet PageObject razred modula pypdf. Predmet bralnika PDF ima funkcijo strani [] ki vzame številko strani (začenši z indeksom 0) kot argument in vrne objekt strani.
     
 print(pageObj.extract_text())   
  • Predmet strani ima funkcijo izvleček_besedila() za ekstrahiranje besedila s strani PDF.


Opomba: Medtem ko so datoteke PDF odlične za postavitev besedila na način, ki ga ljudje enostavno natisnejo in preberejo, jih programska oprema ne more preprosto razčleniti v golo besedilo. Kot tak lahko pypdf dela napake pri pridobivanju besedila iz PDF-ja in nekaterih PDF-jev morda sploh ne more odpreti. Na žalost glede tega ne morete veliko narediti. pypdf morda preprosto ne bo mogel delati z nekaterimi vašimi datotekami PDF.

2. Vrtenje strani 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  ()   

Tukaj si lahko ogledate, kako na prvi strani rotated_example.pdf izgleda (desna slika) po rotaciji:

Vrtenje pdf datoteke

Nekaj ​​pomembnih točk, povezanih z zgornjo kodo:
 

  • Za rotacijo najprej ustvarimo predmet bralnika PDF izvirnega PDF-ja.
 writer = PdfWriter()   
  • Zasukane strani bodo zapisane v nov PDF. Za pisanje v datoteke PDF uporabljamo objekt of PdfWriter razred modula pypdf.
 for page in range(len(pdfReader.pages)):   
pageObj = pdfReader.pages[page]
pageObj.rotate(rotation)
writer.add_page(pageObj)
  • Zdaj ponovimo vsako stran izvirnega PDF-ja. Predmet strani dobimo z .pages[] metoda razreda bralnika PDF. Zdaj stran zavrtimo za vrti() metoda razreda objektov strani. Nato dodamo stran predmetu zapisovalnika PDF z uporabo dodaj() metoda razreda zapisovalnika PDF s posredovanjem predmeta zasukane strani.
 newFile = open(newFileName 'wb')   
writer.write(newFile)
newFile.close()
  • Zdaj moramo strani PDF zapisati v novo datoteko PDF. Najprej odpremo nov predmet datoteke in vanj zapišemo strani PDF z uporabo pisati() metoda predmeta zapisovalnika PDF. Na koncu zapremo izvirni objekt datoteke PDF in objekt nove datoteke.

3. Združevanje datotek 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  ()   

Rezultat zgornjega programa je kombiniran PDF kombinirani_primer.pdf pridobljeno z združitvijo primer.pdf in rotated_example.pdf .
 

  • Oglejmo si pomembne vidike tega programa:
     
 pdfWriter = PdfWriter()  
  • Za združevanje uporabljamo vnaprej zgrajen razred PdfWriter modula pypdf.
    Tukaj ustvarimo objekt pdfwriter razreda pisca PDF
  # appending pdfs one by one   
for pdf in pdfs:
pdfWriter.append(pdf)
  • Zdaj dodamo datotečni objekt vsakega PDF-ja objektu zapisovalnika PDF z uporabo pripni() metoda.
  # writing combined pdf to output pdf file   
with open(output 'wb') as f:
pdfWriter.write(f)
  • Nazadnje zapišemo strani PDF v izhodno datoteko PDF z uporabo pisati metoda predmeta zapisovalnika PDF.

4. Razdelitev datoteke 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  ()   

Rezultat bodo tri nove datoteke PDF z del 1 (stran 01) del 2 (stran 23) del 3 (stran 4-konec) .
V zgornjem programu python ni bila uporabljena nobena nova funkcija ali razred. Z uporabo preproste logike in iteracij smo ustvarili razdelitve opravljenih PDF-jev glede na seznam opravljenih razcepi .

5. Dodajanje vodnega žiga na strani 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  ()   

Tukaj je videti prva stran izvirne (levo) in z vodnim žigom (desno) datoteke PDF:
 

Vodni žig datoteke pdf

  • Celoten postopek je enak kot v primeru vrtenja strani. Edina razlika je:
     
 wmpageObj = add_watermark(mywatermark pdfReader.pages[page])   
  • Predmet strani se pretvori v objekt strani z vodnim žigom z uporabo add_watermark() funkcijo.
  • Poskusimo razumeti add_watermark() funkcija:
     
  reader = PdfReader(wmFile)   
pageObj.merge_page(reader.pages[0])
return pageObj
  • Predvsem ustvarimo objekt bralnika PDF vodni žig.pdf . Na predmet posredovane strani, ki ga uporabljamo merge_page() funkcijo in posreduje predmet strani prve strani predmeta bralnika PDF z vodnim žigom. To bo prekrivalo vodni žig čez objekt strani, ki ste jo opravili.


In tukaj smo prišli do konca te dolge vadnice o delu z datotekami PDF v pythonu.
Zdaj lahko preprosto ustvarite svojega upravitelja PDF!
Reference:
 

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

Če vam je GeeksforGeeks všeč in bi radi prispevali, lahko tudi napišete članek z uporabo write.geeksforgeeks.org ali pošljete svoj članek na [email protected]. Oglejte si, da se vaš članek pojavi na glavni strani GeeksforGeeks in pomagajte drugim Geekom.
Prosimo, napišite komentarje, če najdete kar koli nepravilnega ali če želite deliti več informacij o zgoraj obravnavani temi.
 

Ustvari kviz