Vai al contenuto principale
Guida per sviluppatori

Tesseract OCR per PDF
e PDF ricercabili.

La guida completa e testata all'OCR dei PDF con Tesseract: rasterizzare le pagine, creare PDF ricercabili, usare OCRmyPDF e pdfsandwich, eseguirlo end-to-end in Python e correggere gli errori più comuni.

In breve (un comando)

Per un PDF multipagina reale, OCRmyPDF è la via più rapida.

bash
pip install ocrmypdf      # oppure: apt install ocrmypdf
ocrmypdf input.pdf output.pdf

Niente OCRmyPDF? Rasterizza e usa la CLI di Tesseract direttamente — vedi sotto.

Perché i PDF devono essere rasterizzati

Tesseract riconosce immagini, non contenitori PDF.

Un PDF è un contenitore: può includere testo vettoriale, font incorporati o immagini di pagine scansionate. Tesseract legge immagini raster (TIFF, PNG, JPEG, WebP…), quindi le pagine devono prima essere convertite in immagini. Scegli il rasterizzatore in base a ciò che hai installato:

StrumentoInstallazioneNote
pdftoppm (poppler)apt install poppler-utilsVeloce, scriptabile, la scelta classica
pdftocairo (poppler)poppler-utilsSimile a pdftoppm, output Cairo
ImageMagickapt install imagemagickconvert -density 300 in.pdf out.tif
PyMuPDFpip install pymupdfPython puro, senza binari esterni
pdf2imagepip install pdf2imageWrapper Python su poppler
bash
# PDF -> un PNG per pagina a 300 DPI
pdftoppm -png -r 300 input.pdf pagina

Il DPI è il più importante: 300 DPI è il compromesso standard; 600 DPI per font piccoli o archiviazione; evita sotto i 200 DPI.

Creare un PDF ricercabile con la CLI di Tesseract

Un'immagine diventa una pagina PDF ricercabile con la configurazione di output pdf.

bash
# Immagine -> PDF ricercabile
tesseract pagina-1.png output pdf

# Solo livello di testo (senza immagine visibile)
tesseract scansione.png output textonly_pdf

# Più pagine in un PDF: passa una lista di immagini
tesseract listaimmagini.txt output pdf

Per un PDF multipagina, metti ogni percorso immagine su una riga in listaimmagini.txt. Riferimento completo dei formati: documentazione.

Metodo B — OCRmyPDF (consigliato per PDF reali)

OCRmyPDF gestisce rasterizzazione, OCR, raddrizzamento, rotazione e livello di testo invisibile in un comando.

bash
ocrmypdf input.pdf output.pdf                    # base
ocrmypdf -l eng+ita input.pdf output.pdf         # lingue
ocrmypdf --deskew --rotate-pages input.pdf output.pdf
ocrmypdf --optimize 2 input.pdf output.pdf       # riduce il file
ocrmypdf --skip-text input.pdf output.pdf        # mantiene le pagine con testo

OCRmyPDF usa Tesseract e richiede Ghostscript e gli strumenti poppler. Opzioni utili: --force-ocr, --redo-ocr, --pages 1-10.

Metodo C — pdfsandwich

Un wrapper più leggero che aggiunge un livello di testo e applica preprocessamento come il raddrizzamento.

bash
pdfsandwich scansione.pdf          # genera scansione_ocr.pdf
pdfsandwich -lang eng+ita scansione.pdf

Metodo D — Python end-to-end

Usa pdf2image per rasterizzare e pytesseract per costruire il PDF ricercabile, poi unisci con pypdf.

pdf.py
import io, pytesseract
from pdf2image import convert_from_path
from pypdf import PdfWriter, PdfReader

pages = convert_from_path("input.pdf", dpi=300)   # richiede poppler
writer = PdfWriter()
for page in pages:
    pdf_bytes = pytesseract.image_to_pdf_or_hocr(page, extension="pdf", lang="ita")
    writer.add_page(PdfReader(io.BytesIO(pdf_bytes)).pages[0])
with open("output.pdf", "wb") as f:
    writer.write(f)

Su Windows, passa la cartella bin di poppler con poppler_path=. Più dettagli nella guida pytesseract.

Quale metodo usare?

MetodoIdeale perConfigurazioneMultipagina
OCRmyPDFPDF reali, automazioneGhostscript + popplerSì, in un comando
pdfsandwichLivello di testo rapido con preprocessamentopoppler + ImageMagickSì
CLI di TesseractImmagini o liste di immaginiSolo TesseractCon una lista di immagini
Python (pdf2image)Pipeline e logica personalizzatapoppler + pytesseractCiclo e unione

Fedeltà del layout e sovrapposizione del testo

Perché i PDF ricercabili a volte sembrano disallineati e come mantenere la geometria.

Qualità e prestazioni

Risoluzione dei problemi

SintomoCausaSoluzione
Unable to get page count. Is poppler installed?pdf2image non trova popplerInstalla poppler-utils o imposta poppler_path su Windows.
Il PDF di output non ha testo ricercabileL'OCR non è stato eseguito o lingua errataVerifica il successo e imposta -l/--language sulla lingua del documento.
La sovrapposizione del testo è disallineataDPI o dimensione pagina erratiRasterizza a 300 DPI con la dimensione originale.
Il file di output è enormeImmagini senza perdita a 600 DPIUsa --optimize / JPEG, o riduci il DPI.
Un PDF protetto da password fallisceInput cifratoDecifra prima o passa la password se lo strumento lo supporta.

FAQ PDF

Come rendo un PDF ricercabile?

Usa ocrmypdf input.pdf output.pdf, oppure rasterizza le pagine ed esegui tesseract pagina.tif output pdf.

Perché Tesseract non legge un PDF direttamente?

Tesseract riconosce immagini raster, quindi le pagine del PDF devono prima essere convertite in immagini.

Quale DPI devo usare?

300 DPI per la maggior parte dei documenti; 600 DPI per font piccoli o archiviazione.

Posso applicare OCR a un PDF in Python?

Sì — usa pdf2image con poppler e pytesseract.image_to_pdf_or_hocr, poi unisci le pagine con pypdf.

Come mantengo il layout preciso?

Usa la stessa dimensione e DPI originali e preferisci OCRmyPDF, che conserva l'immagine e aggiunge il livello di testo sopra.