Lavorare con file PDF in Python

Lavorare con file PDF in Python

Tutti voi dovete avere familiarità con cosa sono i PDF. Infatti sono uno dei media digitali più importanti e ampiamente utilizzati. PDF sta per Formato documento portatile . Utilizza .pdf estensione. Viene utilizzato per presentare e scambiare documenti in modo affidabile indipendentemente dall'hardware del software o dal sistema operativo.
Inventato da Adobe PDF è ora uno standard aperto gestito dall'Organizzazione internazionale per la standardizzazione (ISO). I PDF possono contenere collegamenti e pulsanti, campi del modulo, audio, video e logica aziendale.
In questo articolo impareremo come possiamo eseguire varie operazioni come:
 

  • Estrazione di testo da PDF
  • Rotazione delle pagine PDF
  • Unione di PDF
  • Dividere PDF
  • Aggiunta di filigrana alle pagine PDF

Installazione: Utilizzando semplici script Python!
Utilizzeremo un modulo pypdf di terze parti.
pypdf è una libreria Python creata come toolkit PDF. È in grado di:
 

  • Estrazione delle informazioni sul documento (titolo autore...)
  • Dividere i documenti pagina per pagina
  • Unire i documenti pagina per pagina
  • Ritaglio di pagine
  • Unione di più pagine in un'unica pagina
  • Crittografia e decrittografia di file PDF
  • e altro ancora!

Per installare pypdf esegui il seguente comando dalla riga di comando:



 pip install pypdf  

Il nome di questo modulo fa distinzione tra maiuscole e minuscole, quindi assicurati che il file E è minuscolo e tutto il resto è maiuscolo. Sono disponibili tutto il codice e i file PDF utilizzati in questo tutorial/articolo Qui .

1. Estrazione del testo dal file 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  ())   

L'output del programma sopra è simile al seguente:
 

 20   
PythonBasics
S.R.Doty
August272008
Contents

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

Proviamo a comprendere il codice sopra in blocchi:
 

 reader = PdfReader('example.pdf')   
  • Qui creiamo un oggetto di PdfReader classe del modulo pypdf e passa il percorso al file PDF e ottieni un oggetto lettore PDF.
     
 print(len(reader.pages))   
  • pagine La proprietà fornisce il numero di pagine nel file PDF. Ad esempio nel nostro caso è 20 (vedi prima riga di output).
     
 pageObj = reader.pages[0]   
  • Ora creiamo un oggetto di PageObject classe del modulo pypdf. L'oggetto lettore PDF ha una funzione pagine[] che prende come argomento il numero di pagina (a partire dall'indice 0) e restituisce l'oggetto pagina.
     
 print(pageObj.extract_text())   
  • L'oggetto della pagina ha una funzione estrai_testo() per estrarre il testo dalla pagina PDF.


Nota: Sebbene i file PDF siano ottimi per disporre il testo in un modo che sia facile da stampare e leggere, non sono semplici da analizzare per il software in testo normale. Pertanto, pypdf potrebbe commettere errori durante l'estrazione del testo da un PDF e potrebbe persino non essere in grado di aprire alcuni PDF. Sfortunatamente non puoi fare molto al riguardo. pypdf potrebbe semplicemente non essere in grado di funzionare con alcuni dei tuoi particolari file PDF.

2. Rotazione delle pagine 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  ()   

Qui puoi vedere come si presenta la prima pagina di esempio_ruotato.pdf appare come (immagine a destra) dopo la rotazione:

Rotazione di un file pdf

Alcuni punti importanti relativi al codice di cui sopra:
 

  • Per la rotazione creiamo prima un oggetto lettore PDF del PDF originale.
 writer = PdfWriter()   
  • Le pagine ruotate verranno scritte in un nuovo PDF. Per scrivere su PDF utilizziamo l'oggetto of PdfWriter classe del modulo pypdf.
 for page in range(len(pdfReader.pages)):   
pageObj = pdfReader.pages[page]
pageObj.rotate(rotation)
writer.add_page(pageObj)
  • Ora iteriamo ogni pagina del PDF originale. Otteniamo l'oggetto della pagina da .pagine[] metodo della classe del lettore PDF. Ora ruotiamo la pagina di ruotare() metodo della classe dell'oggetto della pagina. Quindi aggiungiamo una pagina all'oggetto scrittore PDF utilizzando aggiungere() metodo della classe di scrittura PDF passando l'oggetto pagina ruotata.
 newFile = open(newFileName 'wb')   
writer.write(newFile)
newFile.close()
  • Ora dobbiamo scrivere le pagine PDF in un nuovo file PDF. Per prima cosa apriamo il nuovo oggetto file e scriviamo le pagine PDF utilizzando scrivere() metodo dell'oggetto scrittore PDF. Infine chiudiamo l'oggetto file PDF originale e il nuovo oggetto file.

3. Unione di file 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  ()   

L'output del programma sopra è un PDF combinato combinato_esempio.pdf ottenuto mediante fusione esempio.pdf E esempio_ruotato.pdf .
 

  • Diamo uno sguardo agli aspetti importanti di questo programma:
     
 pdfWriter = PdfWriter()  
  • Per la fusione utilizziamo una classe precostruita PdfWriter del modulo pypdf.
    Qui creiamo un oggetto pdfwriter del corso di scrittura PDF
  # appending pdfs one by one   
for pdf in pdfs:
pdfWriter.append(pdf)
  • Ora aggiungiamo l'oggetto file di ciascun oggetto di scrittura da PDF a PDF utilizzando il file aggiungere() metodo.
  # writing combined pdf to output pdf file   
with open(output 'wb') as f:
pdfWriter.write(f)
  • Infine scriviamo le pagine PDF nel file PDF di output utilizzando scrivere metodo dell'oggetto scrittore PDF.

4. Divisione del file 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  ()   

L'output sarà composto da tre nuovi file PDF diviso 1 (pagina 01) diviso 2 (pagina 23) diviso 3 (pagina 4-fine) .
Nessuna nuova funzione o classe è stata utilizzata nel programma Python sopra. Utilizzando semplici logiche e iterazioni abbiamo creato le suddivisioni dei PDF passati in base all'elenco passato si divide .

5. Aggiunta di filigrana alle pagine 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  ()   

Ecco come appare la prima pagina del file PDF originale (a sinistra) e con filigrana (a destra):
 

Filigrana sul file pdf

  • Tutto il processo è lo stesso dell'esempio di rotazione della pagina. L'unica differenza è:
     
 wmpageObj = add_watermark(mywatermark pdfReader.pages[page])   
  • L'oggetto pagina viene convertito in oggetto pagina con filigrana utilizzando aggiungi_filigrana() funzione.
  • Cerchiamo di capire aggiungi_filigrana() funzione:
     
  reader = PdfReader(wmFile)   
pageObj.merge_page(reader.pages[0])
return pageObj
  • Innanzitutto creiamo un oggetto lettore PDF di filigrana.pdf . Usiamo l'oggetto della pagina passata unisci_pagina() funzione e passare l'oggetto pagina della prima pagina dell'oggetto lettore PDF filigrana. Ciò sovrapporrà la filigrana all'oggetto della pagina passata.


E qui arriviamo alla fine di questo lungo tutorial su come lavorare con i file PDF in Python.
Ora puoi creare facilmente il tuo gestore PDF!
Riferimenti:
 

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

Se ti piace GeeksforGeeks e desideri contribuire, puoi anche scrivere un articolo utilizzando write.geeksforgeeks.org o inviare il tuo articolo per posta a [email protected]. Guarda il tuo articolo apparire sulla pagina principale di GeeksforGeeks e aiuta altri Geeks.
Per favore scrivi commenti se trovi qualcosa di sbagliato o se vuoi condividere maggiori informazioni sull'argomento discusso sopra.
 

Crea quiz

Articoli Più

Categoria

Articoli Interessanti