PDF-fájlok kezelése Pythonban

PDF-fájlok kezelése Pythonban

Mindenkinek ismernie kell a PDF-fájlokat. Valójában ezek az egyik legfontosabb és legszélesebb körben használt digitális média. A PDF jelentése Hordozható dokumentum formátum . Használ .pdf kiterjesztés. A szoftver hardvertől vagy operációs rendszertől független dokumentumok megbízható bemutatására és cseréjére szolgál.
Feltalálta Vályogtégla A PDF ma már a Nemzetközi Szabványügyi Szervezet (ISO) által fenntartott nyílt szabvány. A PDF-fájlok hivatkozásokat és gombokat tartalmazhatnak audio-videó és üzleti logika mezőiből.
Ebben a cikkben megtudjuk, hogyan végezhetünk különféle műveleteket, például:
 

  • Szöveg kinyerése PDF-ből
  • Forgatható PDF oldalak
  • PDF-ek egyesítése
  • PDF felosztása
  • Vízjel hozzáadása PDF-oldalakhoz

Telepítés: Egyszerű python szkriptek használata!
Harmadik féltől származó pypdf modult fogunk használni.
A pypdf egy python könyvtár, amely PDF eszközkészletként készült. Képes:
 

  • Dokumentuminformációk kinyerése (a cím szerzője…)
  • A dokumentumok oldalról oldalra bontása
  • Dokumentumok egyesítése oldalanként
  • Oldalak kivágása
  • Több oldal összevonása egyetlen oldalba
  • PDF fájlok titkosítása és visszafejtése
  • és még több!

A pypdf telepítéséhez futtassa a következő parancsot a parancssorból:

 pip install pypdf  

Ez a modulnév megkülönbözteti a kis- és nagybetűket, ezért ellenőrizze, hogy a és kisbetűs, minden más nagybetűs. Az oktatóanyagban/cikkben használt összes kód és PDF fájl elérhető itt .

1. Szöveg kinyerése PDF fájlból

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

A fenti program kimenete így néz ki:
 

 20   
PythonBasics
S.R.Doty
August272008
Contents

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

Próbáljuk meg megérteni a fenti kódot darabokban:
 

 reader = PdfReader('example.pdf')   
  • Itt létrehozunk egy objektumot PdfReader osztályú pypdf modult, és adja át a PDF-fájl elérési útját, és szerezzen be egy PDF-olvasó objektumot.
     
 print(len(reader.pages))   
  • oldalakat tulajdonság megadja a PDF-fájl oldalainak számát. Például a mi esetünkben ez 20 (lásd a kimenet első sorát).
     
 pageObj = reader.pages[0]   
  • Most létrehozunk egy objektumot PageObject pypdf modul osztálya. A PDF olvasó objektumnak van funkciója oldalak[] amely az oldalszámot veszi (a 0 indextől kezdve) argumentumként, és visszaadja az oldalobjektumot.
     
 print(pageObj.extract_text())   
  • Az oldalobjektumnak van funkciója kivonat_szöveg() szöveg kinyeréséhez a PDF-oldalról.


Jegyzet: Míg a PDF-fájlok kiválóan alkalmasak a szöveg olyan elrendezésére, amelyet az emberek könnyen nyomtathatnak és olvashatnak, a szoftverek számára nem egyszerű egyszerű szöveggé elemezni. Ennek megfelelően a pypdf hibákat követhet el, amikor szöveget bont ki egy PDF-ből, és egyes PDF-eket egyáltalán nem tud megnyitni. Ez ellen sajnos nem sokat tudsz tenni. Előfordulhat, hogy a pypdf egyszerűen nem tud együttműködni bizonyos PDF-fájlokkal.

2. Forgató PDF-oldalak
 

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

Itt láthatja, hogyan az első oldal elforgatott_example.pdf így néz ki (jobb oldali kép) elforgatás után:

Pdf fájl elforgatása

Néhány fontos pont a fenti kóddal kapcsolatban:
 

  • Az elforgatáshoz először létrehozunk egy PDF olvasó objektumot az eredeti PDF-ből.
 writer = PdfWriter()   
  • Az elforgatott oldalak új PDF-fájlba kerülnek. PDF-ekbe íráshoz az objektumot használjuk PdfWriter pypdf modul osztálya.
 for page in range(len(pdfReader.pages)):   
pageObj = pdfReader.pages[page]
pageObj.rotate(rotation)
writer.add_page(pageObj)
  • Most ismételjük az eredeti PDF minden oldalát. Az oldalobjektumot kapjuk .pages[] PDF olvasó osztály módszere. Most forgatjuk el az oldalt forog() oldalobjektum osztály metódusa. Ezután hozzáadunk egy oldalt a PDF író objektumhoz a használatával add() PDF író osztály metódusa az elforgatott oldalobjektum átadásával.
 newFile = open(newFileName 'wb')   
writer.write(newFile)
newFile.close()
  • Most egy új PDF fájlba kell írnunk a PDF oldalakat. Először megnyitjuk az új fájlobjektumot, és a segítségével PDF oldalakat írunk rá írj () PDF író objektum módszere. Végül bezárjuk az eredeti PDF fájl objektumot és az új fájl objektumot.

3. PDF fájlok egyesítése

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

A fenti program kimenete egy kombinált PDF kombinált_példa.pdf összevonásával kapjuk példa.pdf és elforgatott_example.pdf .
 

  • Vessünk egy pillantást a program fontos szempontjaira:
     
 pdfWriter = PdfWriter()  
  • Az összevonáshoz egy előre elkészített osztályt használunk PdfWriter pypdf modulból.
    Itt létrehozunk egy objektumot pdfwriter PDF író osztályból
  # appending pdfs one by one   
for pdf in pdfs:
pdfWriter.append(pdf)
  • Most minden PDF fájl objektumát hozzáfűzzük a PDF író objektumokhoz a segítségével mellékel() módszer.
  # writing combined pdf to output pdf file   
with open(output 'wb') as f:
pdfWriter.write(f)
  • Végül a PDF oldalakat a kimeneti PDF fájlba írjuk a segítségével írj PDF író objektum módszere.

4. PDF fájl felosztása

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

A kimenet három új PDF fájl lesz 1. felosztás (01. oldal) 2. osztás (23. oldal) 3. osztás (4. oldal vége) .
A fenti python programban nem használtak új függvényt vagy osztályt. Egyszerű logika és iterációk segítségével elkészítettük az átadott PDF felosztását az átadott lista szerint hasít .

5. Vízjel hozzáadása PDF-oldalakhoz

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

Így néz ki az eredeti (bal oldali) és a vízjeles (jobb oldali) PDF-fájl első oldala:
 

Vízjel a pdf fájlban

  • Az összes folyamat megegyezik az oldalforgatási példával. Az egyetlen különbség a következő:
     
 wmpageObj = add_watermark(mywatermark pdfReader.pages[page])   
  • Az oldalobjektum vízjeles oldalobjektummá alakul a használatával add_watermark() funkció.
  • Próbáljuk megérteni add_watermark() funkció:
     
  reader = PdfReader(wmFile)   
pageObj.merge_page(reader.pages[0])
return pageObj
  • Mindenekelőtt létrehozunk egy PDF olvasó objektumot vízjel.pdf . Az általunk használt átadott oldalobjektumhoz merge_page() függvényt, és adja át a vízjel PDF olvasó objektum első oldalának oldalobjektumát. Ez ráborítja a vízjelet az átadott oldalobjektumra.


És itt elérkeztünk ennek a hosszú oktatóanyagnak a végére, amely a PDF-fájlokkal való munkavégzésről szól a Pythonban.
Most könnyedén létrehozhatja saját PDF-kezelőjét!
Referenciák:
 

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

Ha tetszik a GeeksforGeeks, és szeretne hozzájárulni, írhat egy cikket a write.geeksforgeeks.org oldalon, vagy elküldheti cikkét a [email protected] címre. Tekintse meg cikkét a GeeksforGeeks főoldalán, és segítsen másoknak.
Kérjük, írjon megjegyzéseket, ha valami helytelent talál, vagy ha további információkat szeretne megosztani a fent tárgyalt témával kapcsolatban.
 

Kvíz létrehozása

Lehet, Hogy Tetszeni Fog