HOWTO · Python
Leggi PDF in Python
Questo tutorial mostra come leggere un PDF in Python.
In questa pagina
L’estrazione del testo dai PDF è utile quando devi cercare informazioni nei rapporti, analizzare documenti o trasferire testo in un altro flusso di lavoro. L’approccio più adatto dipende da come il PDF memorizza il testo e dal fatto che tu debba preservare l’impaginazione delle pagine. Gli esempi seguenti mostrano schemi d’uso comuni delle API; non sono stati eseguiti, perché per questa modifica non sono state fornite prove di esecuzione con Python. Verifica ogni API rispetto alla versione installata nel tuo progetto. Ogni esempio presuppone che nella directory corrente sia presente un file sample.pdf leggibile e segnala l’assenza del file o del pacchetto senza generare un errore non gestito.
Scegliere una libreria Python per leggere i PDF
Le cinque librerie presentate qui offrono modi diversi per accedere al testo estratto. PyPDF2 espone direttamente le pagine: è comodo quando vuoi elaborarne una sola o scorrere l’intero documento. pdfplumber espone il testo delle pagine e oggetti relativi all’impaginazione, utili quando la posizione degli elementi è importante. PyMuPDF permette di estrarre il testo pagina per pagina tramite la sua API per i documenti. pdfminer.six offre una funzione di alto livello per estrarre il testo di un documento. textract fornisce un’interfaccia più ampia per l’estrazione dai documenti; il suo comportamento può dipendere dalle dipendenze installate.
Questi sono diversi schemi d’uso, non una classifica valida in ogni situazione. Prova la stessa pagina rappresentativa del tuo PDF e controlla se testo, ordine di lettura e spaziatura sono adatti al tuo caso.
Installare la libreria che intendi usare
Installa soltanto il pacchetto dell’approccio che vuoi provare, usando python -m pip install PyPDF2, python -m pip install pdfplumber, python -m pip install PyMuPDF, python -m pip install pdfminer.six oppure python -m pip install textract. Il nome del pacchetto e quello usato per importarlo in Python non sempre coincidono: per esempio, pdfminer.six si importa tramite pdfminer, mentre PyMuPDF è stato spesso importato come fitz. Prima di adattare un esempio, consulta la documentazione della versione che hai installato.
Assegna il percorso del PDF a una variabile, così sarà facile modificarlo. Gli esempi usano un percorso relativo; se la directory di lavoro dello script non è quella che contiene il PDF, usa un percorso assoluto. I PDF sono file binari: le API che accettano un file aperto devono riceverne uno aperto in modalità "rb".
Leggere il testo di un PDF con PyPDF2
PdfReader mette a disposizione una raccolta di pagine. L’esempio seguente estrae il testo dalla prima pagina, se presente, e unisce quello estratto da tutte le pagine. Una pagina potrebbe non contenere testo estraibile; perciò il codice tratta un risultato None come una stringa vuota. Il gestore di contesto chiude il file al termine dell’elaborazione.
Il codice e le etichette o gli output visibili in questa sezione restano in inglese.
from pathlib import Path
pdf_path = Path("sample.pdf")
if not pdf_path.is_file():
print(f"PDF not found: {pdf_path}")
else:
try:
from PyPDF2 import PdfReader
except ImportError:
print("Install PyPDF2 to run this example.")
else:
try:
with pdf_path.open("rb") as pdf_file:
reader = PdfReader(pdf_file)
if reader.pages:
first_page_text = reader.pages[0].extract_text() or ""
all_pages_text = "\n".join(
page.extract_text() or "" for page in reader.pages
)
print(first_page_text)
except Exception as error:
print(f"PDF could not be read: {error}")
Per elaborare una sola pagina, seleziona il relativo indice a base zero da reader.pages e controlla che rientri nel numero di pagine prima di usarlo. L’espressione per l’intero documento unisce le pagine con separatori di nuova riga: così è più facile individuare i confini tra le pagine che concatenando il testo senza separatori. Lo snippet stampa la prima pagina; modifica l’ultima chiamata a print in print(all_pages_text) per mostrare il testo unito dell’intero documento. L’output dipende dal PDF e qui non viene mostrato.
Estrarre testo e dettagli dell’impaginazione con pdfplumber
Usa pdfplumber se vuoi esaminare il testo pagina per pagina e potrebbero servirti informazioni sull’impaginazione. Questo esempio estrae il testo di ogni pagina, sostituisce con una stringa vuota quello delle pagine senza testo e unisce i risultati con caratteri di nuova riga. Non afferma di ricostruire le tabelle né garantisce l’ordine di lettura: controlla il testo restituito per il documento che stai elaborando.
Il codice e le etichette o gli output visibili in questa sezione restano in inglese.
from pathlib import Path
pdf_path = Path("sample.pdf")
if not pdf_path.is_file():
print(f"PDF not found: {pdf_path}")
else:
try:
import pdfplumber
except ImportError:
print("Install pdfplumber to run this example.")
else:
try:
with pdfplumber.open(pdf_path) as pdf:
text = "\n".join(page.extract_text() or "" for page in pdf.pages)
print(text)
except Exception as error:
print(f"PDF could not be read: {error}")
La libreria espone anche oggetti pagina e informazioni sull’impaginazione per analisi più mirate. Usa queste funzionalità solo quando contano la posizione o la struttura del documento e verifica il risultato confrontandolo con la pagina originale. La sola estrazione del testo potrebbe non mantenere le colonne nel modo previsto.
Leggere il testo di un PDF con PyMuPDF
PyMuPDF apre un documento e offre l’estrazione del testo di ogni pagina. Il nome di importazione mostrato qui è fitz, usato in molti esempi esistenti; verifica che sia supportato dalla versione installata. Lo schema seguente raccoglie il testo pagina per pagina e assicura che il documento venga chiuso.
Il codice e le etichette o gli output visibili in questa sezione restano in inglese.
from pathlib import Path
pdf_path = Path("sample.pdf")
if not pdf_path.is_file():
print(f"PDF not found: {pdf_path}")
else:
try:
import fitz
except ImportError:
print("Install PyMuPDF to run this example.")
else:
try:
with fitz.open(str(pdf_path)) as document:
text = "\n".join(page.get_text() for page in document)
print(text)
except Exception as error:
print(f"PDF could not be read: {error}")
Per una singola pagina, accedi alla pagina tramite il suo indice a base zero dopo aver controllato il numero di pagine del documento, quindi chiama get_text() su quella pagina. La modalità di estrazione può influire sulla rappresentazione del testo; se ti serve un formato specifico, consulta la documentazione della versione installata. Questo articolo si concentra sul testo, non sulle altre operazioni PDF della libreria.
Estrarre testo con pdfminer.six
pdfminer.six include la funzione di alto livello extract_text, che accetta il percorso di un documento. Si importa dal pacchetto pdfminer, anche se la distribuzione installabile si chiama pdfminer.six.
Il codice e le etichette o gli output visibili in questa sezione restano in inglese.
from pathlib import Path
pdf_path = Path("sample.pdf")
if not pdf_path.is_file():
print(f"PDF not found: {pdf_path}")
else:
try:
from pdfminer.high_level import extract_text
except ImportError:
print("Install pdfminer.six to run this example.")
else:
try:
text = extract_text(str(pdf_path))
print(text)
except Exception as error:
print(f"PDF could not be read: {error}")
Questa chiamata di alto livello è un punto di partenza conciso. Per un controllo più preciso, pdfminer.six offre un’analisi dell’impaginazione di livello inferiore, ma le relative impostazioni vanno scelte in base al documento e al risultato desiderato. Non dare per scontato che una configurazione di estrazione più dettagliata migliori ogni PDF: confronta il risultato con le pagine originali.
Leggere il testo di un PDF con textract
textract usa un’interfaccia process comune a diversi tipi di documento. Per i PDF, le funzionalità disponibili possono dipendere da programmi esterni e dalla configurazione del pacchetto; in alcuni ambienti, quindi, installare soltanto il pacchetto Python potrebbe non bastare. L’esempio intercetta un errore di elaborazione e lo segnala, invece di considerare l’installazione riuscita una prova che l’estrazione sia configurata.
Il codice e le etichette o gli output visibili in questa sezione restano in inglese.
from pathlib import Path
pdf_path = Path("sample.pdf")
if not pdf_path.is_file():
print(f"PDF not found: {pdf_path}")
else:
try:
import textract
except ImportError:
print("Install textract to run this example.")
else:
try:
extracted = textract.process(str(pdf_path))
except Exception as error:
print(f"Text extraction could not be completed: {error}")
else:
print(extracted.decode("utf-8", errors="replace"))
Con questo schema d’uso, process restituisce byte; decodificandoli si ottiene una stringa Python da stampare o elaborare ulteriormente come testo. Se l’elaborazione segnala uno strumento mancante o un input non supportato, consulta le istruzioni del pacchetto per individuare il componente PDF richiesto dal tuo ambiente.
Capire i limiti dell’estrazione e scegliere una libreria
Un PDF può contenere testo selezionabile, frammenti di testo posizionati, immagini di pagine scansionate o una combinazione di questi elementi. Un estrattore di testo non può restituire parole presenti soltanto come pixel, a meno che sia disponibile e venga usato un passaggio di OCR. Anche quando il testo è incorporato, colonne, tabelle, intestazioni e ordine di lettura possono risultare diversi da come appaiono sulla pagina. Prima di affidarti al testo estratto per un’analisi, confrontalo con il PDF originale.
Parti da PyPDF2 quando basta uno schema diretto che lavori pagina per pagina. Prova pdfplumber quando per l’esame del documento sono rilevanti i dettagli dell’impaginazione. Valuta PyMuPDF se la sua API per il testo delle pagine si adatta al tuo flusso di lavoro, e pdfminer.six se vuoi usare la funzione di estrazione di alto livello o esplorarne le opzioni di impaginazione. Considera textract quando la sua interfaccia più ampia ti è utile e sono soddisfatti i requisiti per elaborare PDF. Nessuna di queste librerie garantisce il risultato migliore per ogni file.
Per un confronto pratico, estrai una pagina rappresentativa con la libreria candidata e controlla se mancano parole, se le colonne si alternano o se le interruzioni di riga rendono difficile l’elaborazione successiva. Conserva il PDF originale per poter verificare i valori importanti. Se il testo manca perché la pagina è una scansione, valuta separatamente l’OCR: cambiare soltanto libreria di estrazione del testo potrebbe non risolvere il problema.