Ultimo aggiornamento: 29 Gen, 2025

Titolo - Lavorare con file PDF in Python

In questo articolo, ti guideremo su come lavorare con file PDF usando Python. Per questo utilizzeremo la libreria pypdf.

Utilizzando la libreria pypdf, dimostreremo come eseguire le seguenti operazioni in Python:

  • Estrarre testo dai PDF
  • Ruotare le pagine dei PDF
  • Unire più PDF
  • Dividere i PDF in file separati
  • Aggiungere filigrane alle pagine dei PDF

Nota: Questo articolo copre molti dettagli preziosi, quindi sentiti libero di saltare alle sezioni che più ti interessano! Il contenuto è organizzato per una facile navigazione, così puoi rapidamente concentrarti su ciò che è più rilevante per te.

Illustrazione - Lavorare con file PDF in Python

Codici di esempio

Puoi scaricare tutto il codice di esempio utilizzato in questo articolo dal seguente link. Include il codice, i file di input e i file di output.

Installare pypdf

Per installare pypdf, basta eseguire il seguente comando nel terminale o prompt dei comandi:

pip install pypdf

Nota: Il comando sopra è sensibile al maiuscolo/minuscolo.

1. Estrarre testo da un file PDF usando Python

Spiegazione del codice

1. Creazione di un oggetto Lettore PDF

reader = PdfReader(pdf_file)
  • PdfReader(pdf_file) carica il file PDF in un oggetto lettore.
  • Questo oggetto permette l’accesso alle pagine e al loro contenuto.

2. Scorrere le pagine

for page_number, page in enumerate(reader.pages, start=1):
  • reader.pages restituisce un elenco di pagine nel PDF.
  • enumerate(..., start=1) assegna un numero di pagina partendo da 1.

3. Stampa del testo estratto

    print(f"Pagina {page_number}:")
    print(page.extract_text())
    print("-" * 50)  # Separatore per la leggibilità
  • page.extract_text() estrae il contenuto di testo dalla pagina corrente.
  • Lo script stampa il testo estratto insieme al numero di pagina.
  • "-" * 50 stampa una linea separatrice (--------------------------------------------------) per una migliore leggibilità.

File PDF di input utilizzato nel codice

Output del codice

2. Ruotare le pagine di un PDF usando Python

Spiegazione del codice

Il codice ruota essenzialmente la prima pagina di 90° in senso orario e salva il PDF modificato senza alterare le altre pagine.

1. Importare le classi richieste

from pypdf import PdfReader, PdfWriter
  • PdfReader: Legge il PDF di input.
  • PdfWriter: Crea un nuovo PDF con le modifiche.

2. Definire i percorsi dei file di input e output

input_pdf = "pdf-to-rotate/input.pdf"
output_pdf = "pdf-to-rotate/rotated_output.pdf"
  • Lo script legge da input.pdf e salva il file modificato come rotated_output.pdf.

3. Leggere il PDF e creare un oggetto Writer

reader = PdfReader(input_pdf)
writer = PdfWriter()
  • reader carica il PDF esistente.
  • writer è utilizzato per memorizzare le pagine modificate.

4. Ruotare la prima pagina di 90 gradi

page = reader.pages[0]
page.rotate(90)  # Ruota di 90 gradi in senso orario
writer.add_page(page)
  • Estrae la pagina 1, la ruota di 90 gradi e la aggiunge al nuovo PDF.

5. Aggiungere le rimanenti pagine senza modifiche

for i in range(1, len(reader.pages)):
    writer.add_page(reader.pages[i])
  • Scorre attraverso le restanti pagine e le aggiunge così come sono.

6. Salvare il nuovo PDF

with open(output_pdf, "wb") as file:
    writer.write(file)
  • Apre rotated_output.pdf in modalità scrittura binaria e salva il nuovo PDF.

7. Stampa di conferma

print(f"Pagina ruotata salvata in {output_pdf}")
  • Visualizza un messaggio di successo.

File PDF di input utilizzato nel codice e relativo output ruotato

Screenshot Screenshot di pagina ruotata nel PDF usando Python

3. Unire file PDF usando Python

Questo script Python dimostra come unire più file PDF da una directory in un singolo PDF usando la libreria PyPDF.

Spiegazione del codice

  • Questo script unisce automaticamente tutti i file PDF trovati nella directory specificata (pdfs-to-merge) in un unico file di output (merged_output.pdf).
  • Si assicura che la directory di output esista e aggiunge le pagine di ciascun PDF nell’ordine in cui sono elencati.
  • Fornisce il file unito finale nella sottodirectory output-dir.

Descrizione del codice

1. Importare le librerie

import os
from pypdf import PdfReader, PdfWriter
  • os: Utilizzato per interagire con il sistema di file, come la lettura delle directory e la gestione dei percorsi dei file.
  • PdfReader: Legge il contenuto di un file PDF.
  • PdfWriter: Crea e scrive un nuovo file PDF.

2. Definire la directory e il file di output

directory = "pdfs-to-merge"
output_file = "output-dir/merged_output.pdf"
  • directory: Specifica la cartella dove sono memorizzati i file PDF.
  • output_file: Definisce il percorso e il nome del file PDF unito di output.

3. Creare la directory di output se non esiste

os.makedirs(os.path.join(directory, "output-dir"), exist_ok=True)
  • Questo assicura che la directory di output esista, e se non esiste, la crea.

4. Creare un oggetto PdfWriter

writer = PdfWriter()
  • writer è utilizzato per raccogliere e combinare tutte le pagine dai PDF.

5. Iterare su tutti i file PDF nella directory

for file_name in sorted(os.listdir(directory)):
    if file_name.endswith(".pdf"):
        file_path = os.path.join(directory, file_name)
        print(f"Aggiungendo: {file_name}")
  • Questo ciclo va attraverso tutti i file nella directory specificata, controllando per i file con l’estensione .pdf. Usa sorted() per elaborarli in ordine alfabetico.

6. Leggere ciascun PDF e aggiungere pagine al Writer

reader = PdfReader(file_path)
writer.append(reader)
  • Per ciascun PDF, PdfReader legge il file, e poi tutte le pagine di quel PDF sono aggiunte a writer.

7. Scrivere il PDF unito in un file di output

output_path = os.path.join(directory, output_file)
with open(output_path, "wb") as output_pdf:
    writer.write(output_pdf)
  • Dopo aver raccolto tutte le pagine, writer.write() scrive il PDF unito nel percorso specificato di output.

8. Stampa di conferma

print(f"PDF unito salvato come: {output_path}")
  • Stampa un messaggio di successo confermando la posizione del file PDF unito salvato.

File PDF di input utilizzati nel codice e PDF unito di output

4. Dividere un PDF usando Python

Spiegazione del codice

Lo script Python sopra divide un PDF in pagine separate utilizzando la libreria PyPDF. Prima si assicura che la directory di output esista, poi legge il file PDF di input. Lo script scorre attraverso ciascuna pagina, crea un nuovo oggetto PdfWriter e salva ciascuna pagina come un singolo file PDF. I file di output sono nominati in sequenza (es. page_1.pdf, page_2.pdf) e memorizzati nella cartella output-dir. Infine, stampa un messaggio di conferma per ciascun file creato e notifica quando il processo è completato.

File PDF di input e file di output divisi

5. Aggiungere una filigrana a un PDF usando Python

Puoi aggiungere una filigrana a un PDF usando la libreria PyPDF sovrapponendo un PDF di filigrana a un PDF esistente. Assicurati che il PDF di filigrana abbia solo una pagina in modo che si applichi correttamente a ciascuna pagina del PDF principale.

Spiegazione del codice

Lo script Python sopra legge un PDF di input, estrae un PDF di filigrana di una pagina, sovrappone la filigrana su ciascuna pagina del PDF di input e salva il PDF filigranato finale.

Descrizione del codice

Ecco una breve spiegazione di ciascuna parte:

1. Importare le classi richieste

from pypdf import PdfReader, PdfWriter
  • PdfReader è usato per leggere i PDF esistenti.
  • PdfWriter è usato per creare e scrivere un nuovo PDF.

2. Definire i percorsi dei file

input_pdf = "pdf-to-watermark/input.pdf"
watermark_pdf = "pdf-to-watermark/watermark.pdf"
output_pdf = "pdf-to-watermark/output_with_watermark.pdf"
  • input_pdf: Il PDF originale al quale sarà aggiunta la filigrana.
  • watermark_pdf: Un PDF separato di una sola pagina che serve da filigrana.
  • output_pdf: Il file di output che conterrà le pagine filigranate.

3. Leggere i PDF

reader = PdfReader(input_pdf)
watermark = PdfReader(watermark_pdf)
  • reader: Legge il PDF di input.
  • watermark: Legge il PDF di filigrana.

4. Creare un oggetto Writer

writer = PdfWriter()
  • Questo sarà usato per creare il PDF filigranato finale.

5. Estrarre la pagina della filigrana

watermark_page = watermark.pages[0]
  • Si presume che il PDF di filigrana abbia solo una pagina, che viene utilizzata per sovrapporsi su tutte le pagine.

6. Scorrere le pagine del PDF di input e unire la filigrana

for page in reader.pages:
    # Unire la filigrana con la pagina corrente
    page.merge_page(watermark_page)
    
    # Aggiungere la pagina unita al Writer
    writer.add_page(page)
  • Itera attraverso ciascuna pagina di input_pdf.
  • merge_page(watermark_page) sovrappone la filigrana sopra la pagina corrente.
  • Aggiunge la pagina modificata al writer.

7. Salvare il PDF filigranato

with open(output_pdf, "wb") as output_file:
    writer.write(output_file)
  • Scrive le pagine modificate in un nuovo file PDF.

8. Stampa di conferma

print(f"PDF filigranato salvato come: {output_pdf}")
  • Stampa il percorso del file di output per conferma.

File PDF di input, PDF di filigrana e PDF di output filigranato

Screenshot Screenshot del PDF filigranato usando Python

Conclusione

In questa guida, abbiamo esplorato le operazioni essenziali sui PDF in Python, inclusa l’estrazione di testo, la rotazione delle pagine, l’unione, la divisione e l’aggiunta di filigrane. Con queste competenze, ora puoi costruire il tuo gestore di file PDF e automatizzare vari compiti sui PDF in modo efficiente.