Työskentely PDF-tiedostojen kanssa Pythonissa

Työskentely PDF-tiedostojen kanssa Pythonissa

Sinun kaikkien on tunnettava PDF-tiedostot. Itse asiassa ne ovat yksi tärkeimmistä ja laajimmin käytetyistä digitaalisista medioista. PDF tarkoittaa Kannettava asiakirjamuoto . Se käyttää .pdf laajennus. Sitä käytetään asiakirjojen esittämiseen ja vaihtamiseen luotettavasti ohjelmistolaitteistosta tai käyttöjärjestelmästä riippumatta.
Keksijä Adobe PDF on nyt Kansainvälisen standardointijärjestön (ISO) ylläpitämä avoin standardi. PDF-tiedostot voivat sisältää linkkejä ja painikkeita ääni-video- ja liiketoimintalogiikkakentille.
Tässä artikkelissa opimme, kuinka voimme tehdä erilaisia ​​​​toimintoja, kuten:
 

  • Tekstin purkaminen PDF-tiedostosta
  • Kääntyvät PDF-sivut
  • PDF-tiedostojen yhdistäminen
  • PDF:n jakaminen
  • Vesileiman lisääminen PDF-sivuille

Asennus: Käytä yksinkertaisia ​​python-skriptejä!
Käytämme kolmannen osapuolen moduulia pypdf.
pypdf on python-kirjasto, joka on rakennettu PDF-työkalusarjaksi. Se pystyy:
 

  • Poimitaan asiakirjan tietoja (nimi tekijä…)
  • Asiakirjojen jakaminen sivulta sivulta
  • Asiakirjojen yhdistäminen sivu sivulta
  • Sivujen rajaus
  • Useiden sivujen yhdistäminen yhdeksi sivuksi
  • PDF-tiedostojen salaus ja salauksen purku
  • ja enemmän!

Asenna pypdf suorittamalla seuraava komento komentoriviltä:

 pip install pypdf  

Tässä moduulin nimessä kirjainkoolla on merkitystä, joten varmista, että ja on pieniä kirjaimia ja kaikki muu on isoja. Kaikki tässä opetusohjelmassa/artikkelissa käytetyt koodit ja PDF-tiedostot ovat saatavilla tässä .

1. Tekstin purkaminen PDF-tiedostosta

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

Yllä olevan ohjelman tulos näyttää tältä:
 

 20   
PythonBasics
S.R.Doty
August272008
Contents

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

Yritetään ymmärtää yllä oleva koodi paloina:
 

 reader = PdfReader('example.pdf')   
  • Täällä luomme kohteen PdfReader pypdf-moduulin luokan ja välitä polku PDF-tiedostoon ja hanki PDF-lukuobjekti.
     
 print(len(reader.pages))   
  • sivuja ominaisuus ilmoittaa PDF-tiedoston sivujen lukumäärän. Esimerkiksi meidän tapauksessamme se on 20 (katso tulosteen ensimmäinen rivi).
     
 pageObj = reader.pages[0]   
  • Nyt luomme kohteen PageObject pypdf-moduulin luokka. PDF-lukijaobjektilla on toiminto sivut[] joka ottaa sivunumeron (alkaen indeksistä 0) argumenttina ja palauttaa sivuobjektin.
     
 print(pageObj.extract_text())   
  • Sivuobjektilla on toiminto Pura_teksti() poimia tekstiä PDF-sivulta.


Huomautus: Vaikka PDF-tiedostot sopivat mainiosti tekstin asettamiseen tavalla, joka on helppo tulostaa ja lukea, ohjelmistojen ei ole helppoa jäsentää tekstiksi. Näin ollen pypdf saattaa tehdä virheitä poimiessaan tekstiä PDF-tiedostosta, eikä se välttämättä pysty avaamaan joitain PDF-tiedostoja ollenkaan. Sinä et valitettavasti voi tehdä tälle paljoa. pypdf ei ehkä yksinkertaisesti pysty toimimaan joidenkin tiettyjen PDF-tiedostojesi kanssa.

2. Kääntyvät PDF-sivut
 

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

Täältä näet, miten ensimmäinen sivu rotated_example.pdf näyttää tältä (oikea kuva) pyörityksen jälkeen:

Pdf-tiedoston kääntäminen

Joitakin yllä olevaan koodiin liittyviä tärkeitä kohtia:
 

  • Kiertoa varten luomme ensin PDF-lukijaobjektin alkuperäisestä PDF-tiedostosta.
 writer = PdfWriter()   
  • Kierretyt sivut kirjoitetaan uuteen PDF-tiedostoon. PDF-tiedostoihin kirjoittamiseen käytämme objektia PdfWriter pypdf-moduulin luokka.
 for page in range(len(pdfReader.pages)):   
pageObj = pdfReader.pages[page]
pageObj.rotate(rotation)
writer.add_page(pageObj)
  • Nyt toistamme alkuperäisen PDF:n jokaisen sivun. Saamme sivuobjektin .pages[] PDF-lukijaluokan menetelmä. Nyt käännämme sivua kiertää() sivuobjektiluokan menetelmä. Sitten lisäämme sivun PDF-kirjoitusobjektiin käyttämällä lisätä() PDF-kirjoitusluokan menetelmä ohittamalla kierretty sivuobjekti.
 newFile = open(newFileName 'wb')   
writer.write(newFile)
newFile.close()
  • Nyt meidän on kirjoitettava PDF-sivut uuteen PDF-tiedostoon. Ensin avataan uusi tiedostoobjekti ja kirjoitetaan siihen PDF-sivuja käyttämällä kirjoittaa() PDF-kirjoitusobjektin menetelmä. Lopuksi suljemme alkuperäisen PDF-tiedoston objektin ja uuden tiedostoobjektin.

3. PDF-tiedostojen yhdistäminen

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

Yllä olevan ohjelman tulos on yhdistetty PDF yhdistetty_esimerkki.pdf saatu yhdistämällä esimerkki.pdf ja rotated_example.pdf .
 

  • Katsotaanpa tämän ohjelman tärkeitä näkökohtia:
     
 pdfWriter = PdfWriter()  
  • Käytämme yhdistämiseen valmiiksi rakennettua luokkaa PdfWriter pypdf-moduulista.
    Täällä luomme objektin pdfwriter PDF-kirjoittajaluokasta
  # appending pdfs one by one   
for pdf in pdfs:
pdfWriter.append(pdf)
  • Nyt liitämme jokaisen PDF-tiedoston tiedostoobjektin PDF-kirjoitusobjektiin käyttämällä liitä() menetelmä.
  # writing combined pdf to output pdf file   
with open(output 'wb') as f:
pdfWriter.write(f)
  • Lopuksi kirjoitamme PDF-sivut tulostettavaan PDF-tiedostoon käyttämällä kirjoittaa PDF-kirjoitusobjektin menetelmä.

4. PDF-tiedoston jakaminen

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

Tulos on kolme uutta PDF-tiedostoa jako 1 (sivu 01) jako 2 (sivu 23) jako 3 (sivu 4-pää) .
Yllä olevassa python-ohjelmassa ei ole käytetty uutta funktiota tai luokkaa. Yksinkertaista logiikkaa ja iteraatioita käyttämällä loimme läpäissyt PDF-osat läpäisyluettelon mukaan halkeaa .

5. Vesileiman lisääminen PDF-sivuille

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

Alkuperäisen (vasemmalla) ja vesileimalla (oikealla) PDF-tiedoston ensimmäinen sivu näyttää tältä:
 

Vesileima pdf-tiedoston

  • Kaikki prosessi on sama kuin sivun kiertoesimerkissä. Ainoa ero on:
     
 wmpageObj = add_watermark(mywatermark pdfReader.pages[page])   
  • Sivuobjekti muunnetaan vesileimaiseksi sivuobjektiksi käyttämällä add_watermark() toiminto.
  • Yritetään ymmärtää add_watermark() toiminto:
     
  reader = PdfReader(wmFile)   
pageObj.merge_page(reader.pages[0])
return pageObj
  • Ensinnäkin luomme PDF-lukijaobjektin vesileima.pdf . Käytämme hyväksyttyyn sivuobjektiin yhdistä_sivu() funktio ja välitä vesileiman PDF-lukijaobjektin ensimmäisen sivun sivuobjekti. Tämä peittää vesileiman ohitetun sivuobjektin päälle.


Ja tässä pääsemme tämän pitkän opetusohjelman loppuun, joka käsittelee PDF-tiedostojen käyttöä pythonissa.
Nyt voit helposti luoda oman PDF-hallinnan!
Viitteet:
 

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

Jos pidät GeeksforGeeksistä ja haluat osallistua, voit myös kirjoittaa artikkelin osoitteessa write.geeksforgeeks.org tai lähettää artikkelisi osoitteeseen [email protected]. Katso artikkelisi ilmestyvän GeeksforGeeks-pääsivulle ja auta muita nörtejä.
Kirjoita kommentteja, jos huomaat jotain väärin tai haluat jakaa lisätietoja yllä käsitellystä aiheesta.
 

Luo tietokilpailu