Lucrul cu fișiere PDF în Python

Lucrul cu fișiere PDF în Python

Cu toții trebuie să fiți familiarizați cu ce sunt PDF-urile. De fapt, acestea sunt una dintre cele mai importante și mai utilizate medii digitale. PDF înseamnă Format de document portabil . Se foloseste .pdf extensie. Este folosit pentru a prezenta și a schimba documente în mod fiabil, independent de hardware-ul software sau de sistemul de operare.
Inventat de Chirpici PDF este acum un standard deschis menținut de Organizația Internațională pentru Standardizare (ISO). PDF-urile pot conține link-uri și butoane din câmpuri audio video și logica de afaceri.
În acest articol vom afla cum putem face diverse operațiuni precum:
 

  • Extragerea textului din PDF
  • Rotirea paginilor PDF
  • Îmbinarea PDF-urilor
  • Împărțirea PDF-ului
  • Adăugarea filigranului la paginile PDF

Instalare: Folosind scripturi Python simple!
Vom folosi un modul terț pypdf.
pypdf este o bibliotecă python construită ca un set de instrumente PDF. Este capabil de:
 

  • Extragerea informațiilor documentului (autorul titlului...)
  • Împărțirea documentelor pagină cu pagină
  • Îmbinarea documentelor pagină cu pagină
  • Decuparea paginilor
  • Îmbinarea mai multor pagini într-o singură pagină
  • Criptarea și decriptarea fișierelor PDF
  • si mai mult!

Pentru a instala pypdf, rulați următoarea comandă din linia de comandă:

 pip install pypdf  

Numele acestui modul face distincția între majuscule și minuscule, așa că asigurați-vă că şi este cu litere mici și orice altceva este cu litere mari. Toate codurile și fișierele PDF utilizate în acest tutorial/articol sunt disponibile Aici .

1. Extragerea textului din fișierul 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  ())   

Ieșirea programului de mai sus arată astfel:
 

 20   
PythonBasics
S.R.Doty
August272008
Contents

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

Să încercăm să înțelegem codul de mai sus în bucăți:
 

 reader = PdfReader('example.pdf')   
  • Aici creăm un obiect de PdfReader clasa de modul pypdf și transmiteți calea către fișierul PDF și obțineți un obiect de citire PDF.
     
 print(len(reader.pages))   
  • pagini proprietatea oferă numărul de pagini din fișierul PDF. De exemplu, în cazul nostru, este 20 (vezi prima linie de ieșire).
     
 pageObj = reader.pages[0]   
  • Acum creăm un obiect de PageObject clasa modulului pypdf. Obiectul cititor PDF are funcție pagini[] care ia numărul paginii (începând de la indexul 0) ca argument și returnează obiectul pagină.
     
 print(pageObj.extract_text())   
  • Obiectul pagină are funcție extract_text() pentru a extrage text din pagina PDF.


Nota: În timp ce fișierele PDF sunt grozave pentru aranjarea textului într-un mod ușor de imprimat și citit de către oameni, software-ul nu este ușor de analizat în text simplu. Ca atare, pypdf poate face greșeli atunci când extrage text dintr-un PDF și poate chiar să nu poată deschide deloc unele PDF-uri. Din păcate, nu prea poți face în acest sens. pypdf ar putea pur și simplu să nu poată funcționa cu unele dintre fișierele PDF specifice.

2. Rotirea paginilor 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  ()   

Aici puteți vedea cum este prima pagină a exemplu_rotat.pdf arată ca (imaginea din dreapta) după rotire:

Rotirea unui fișier pdf

Câteva puncte importante legate de codul de mai sus:
 

  • Pentru rotație creăm mai întâi un obiect de citire PDF al PDF-ului original.
 writer = PdfWriter()   
  • Paginile rotite vor fi scrise într-un nou PDF. Pentru a scrie în PDF-uri folosim obiectul de PdfWriter clasa modulului pypdf.
 for page in range(len(pdfReader.pages)):   
pageObj = pdfReader.pages[page]
pageObj.rotate(rotation)
writer.add_page(pageObj)
  • Acum repetăm ​​fiecare pagină a PDF-ului original. Obținem obiectul paginii de .pagini[] metoda clasei de citire PDF. Acum rotim pagina roti() metoda clasei de obiecte de pagină. Apoi adăugăm o pagină la obiectul PDF writer folosind adăuga() metoda clasei de redactare PDF prin trecerea obiectului pagină rotită.
 newFile = open(newFileName 'wb')   
writer.write(newFile)
newFile.close()
  • Acum trebuie să scriem paginile PDF într-un fișier PDF nou. Mai întâi deschidem noul obiect fișier și scriem pagini PDF în el folosind scrie() metoda obiectului writer PDF. În cele din urmă, închidem obiectul fișier PDF original și noul obiect fișier.

3. Îmbinarea fișierelor 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  ()   

Rezultatul programului de mai sus este un PDF combinat exemplu_combinat.pdf obtinut prin contopire exemplu.pdf şi exemplu_rotat.pdf .
 

  • Să aruncăm o privire asupra aspectelor importante ale acestui program:
     
 pdfWriter = PdfWriter()  
  • Pentru fuziune folosim o clasă pre-construită PdfWriter a modulului pypdf.
    Aici creăm un obiect pdfwriter din clasa de redactare PDF
  # appending pdfs one by one   
for pdf in pdfs:
pdfWriter.append(pdf)
  • Acum adăugăm obiectul fișierului fiecărui PDF la obiectul de redactare PDF folosind adăuga() metodă.
  # writing combined pdf to output pdf file   
with open(output 'wb') as f:
pdfWriter.write(f)
  • În cele din urmă scriem paginile PDF în fișierul PDF de ieșire folosind scrie metoda obiectului writer PDF.

4. Împărțirea fișierului 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  ()   

Ieșirea vor fi trei fișiere PDF noi cu împărțire 1 (pagina 01) împărțire 2 (pagina 23) împărțire 3 (pagina 4-sfârșit) .
Nu a fost folosită nicio funcție sau clasă nouă în programul python de mai sus. Folosind o logică simplă și iterații, am creat împărțirea PDF-ului trecut conform listei trecute despica .

5. Adăugarea filigranului la paginile 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  ()   

Iată cum arată prima pagină a fișierului PDF original (stânga) și cu filigran (dreapta):
 

Filigranarea fișierului pdf

  • Tot procesul este același ca exemplul de rotație a paginii. Singura diferenta este:
     
 wmpageObj = add_watermark(mywatermark pdfReader.pages[page])   
  • Obiectul pagină este convertit în obiect pagină cu filigran folosind add_watermark() funcţie.
  • Să încercăm să înțelegem add_watermark() funcţie:
     
  reader = PdfReader(wmFile)   
pageObj.merge_page(reader.pages[0])
return pageObj
  • În primul rând, creăm un obiect de citire PDF filigran.pdf . La obiectul pagină transmis pe care îl folosim merge_page() funcția și treceți obiectul pagină din prima pagină a obiectului cititor PDF filigran. Acest lucru va suprapune filigranul peste obiectul pagină trecut.


Și aici ajungem la sfârșitul acestui lung tutorial despre lucrul cu fișiere PDF în python.
Acum vă puteți crea cu ușurință propriul manager PDF!
Referinte:
 

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

Dacă vă place GeeksforGeeks și doriți să contribui, puteți scrie și un articol folosind write.geeksforgeeks.org sau trimiteți articolul la [email protected]. Vedeți articolul dvs. care apare pe pagina principală GeeksforGeeks și ajutați alți Geeks.
Vă rugăm să scrieți comentarii dacă găsiți ceva incorect sau dacă doriți să împărtășiți mai multe informații despre subiectul discutat mai sus.
 

Creați un test