Aller au contenu principal
Guide développeur

Tesseract OCR pour PDF
et PDF interrogeables.

Le guide complet et testé pour OCR de PDF avec Tesseract : rastériser les pages, créer des PDF interrogeables, utiliser OCRmyPDF et pdfsandwich, l'exécuter de bout en bout en Python et corriger les erreurs courantes.

En bref (une commande)

Pour un vrai PDF multipage, OCRmyPDF est la voie la plus rapide.

bash
pip install ocrmypdf      # ou : apt install ocrmypdf
ocrmypdf entree.pdf sortie.pdf

Pas d'OCRmyPDF ? Rastérisez et utilisez la CLI Tesseract directement — voir ci-dessous.

Pourquoi les PDF doivent être rastérisés

Tesseract reconnaît des images, pas des conteneurs PDF.

Un PDF est un conteneur : il peut contenir du texte vectoriel, des polices intégrées ou des images de pages scannées. Tesseract lit des images raster (TIFF, PNG, JPEG, WebP…), les pages doivent donc d'abord être converties en images. Choisissez le rastériseur selon ce qui est installé :

OutilInstallationRemarques
pdftoppm (poppler)apt install poppler-utilsRapide, scriptable, le choix classique
pdftocairo (poppler)poppler-utilsSimilaire à pdftoppm, sortie Cairo
ImageMagickapt install imagemagickconvert -density 300 in.pdf out.tif
PyMuPDFpip install pymupdfPython pur, sans binaires externes
pdf2imagepip install pdf2imageWrapper Python autour de poppler
bash
# PDF -> un PNG par page à 300 DPI
pdftoppm -png -r 300 entree.pdf page

Le DPI est le plus important : 300 DPI est le compromis standard ; 600 DPI pour les petites polices ou l'archivage ; évitez en dessous de 200 DPI.

Créer un PDF interrogeable avec la CLI Tesseract

Une image devient une page PDF interrogeable avec la configuration de sortie pdf.

bash
# Image -> PDF interrogeable
tesseract page-1.png sortie pdf

# Couche de texte seule (sans image visible)
tesseract scan.png sortie textonly_pdf

# Plusieurs pages dans un PDF : passer une liste d'images
tesseract listimages.txt sortie pdf

Pour un PDF multipage, placez chaque chemin d'image sur sa propre ligne dans listimages.txt. Référence complète des formats : documentation.

Méthode B — OCRmyPDF (recommandé pour les vrais PDF)

OCRmyPDF gère la rastérisation, l'OCR, le redressement, la rotation et la couche de texte invisible en une commande.

bash
ocrmypdf entree.pdf sortie.pdf                    # basique
ocrmypdf -l eng+fra entree.pdf sortie.pdf         # langues
ocrmypdf --deskew --rotate-pages entree.pdf sortie.pdf
ocrmypdf --optimize 2 entree.pdf sortie.pdf       # réduire le fichier
ocrmypdf --skip-text entree.pdf sortie.pdf        # garder les pages avec texte

OCRmyPDF utilise Tesseract et nécessite Ghostscript et les outils poppler. Options utiles : --force-ocr, --redo-ocr, --pages 1-10.

Méthode C — pdfsandwich

Un wrapper plus léger qui ajoute une couche de texte et effectue un prétraitement comme le redressement.

bash
pdfsandwich scan.pdf          # génère scan_ocr.pdf
pdfsandwich -lang eng+fra scan.pdf

Méthode D — Python de bout en bout

Utilisez pdf2image pour rastériser et pytesseract pour construire le PDF interrogeable, puis fusionnez avec pypdf.

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

pages = convert_from_path("entree.pdf", dpi=300)   # nécessite poppler
writer = PdfWriter()
for page in pages:
    pdf_bytes = pytesseract.image_to_pdf_or_hocr(page, extension="pdf", lang="fra")
    writer.add_page(PdfReader(io.BytesIO(pdf_bytes)).pages[0])
with open("sortie.pdf", "wb") as f:
    writer.write(f)

Sous Windows, passez le dossier bin de poppler via poppler_path=. Plus de détails dans le guide pytesseract.

Quelle méthode choisir ?

MéthodeIdéal pourConfigurationMultipage
OCRmyPDFVrais PDF, automatisationGhostscript + popplerOui, en une commande
pdfsandwichCouche de texte rapide avec prétraitementpoppler + ImageMagickOui
CLI TesseractImages ou listes d'imagesTesseract uniquementVia une liste d'images
Python (pdf2image)Pipelines et logique personnaliséepoppler + pytesseractBoucle et fusion

Fidélité de mise en page et superposition du texte

Pourquoi les PDF interrogeables semblent parfois décalés et comment garder la géométrie.

Qualité et performance

Dépannage

SymptômeCauseSolution
Unable to get page count. Is poppler installed?pdf2image ne trouve pas popplerInstallez poppler-utils ou définissez poppler_path sous Windows.
Le PDF de sortie n'a pas de texte interrogeableL'OCR n'a pas tourné ou mauvaise langueVérifiez le succès et définissez -l/--language sur la langue du document.
La superposition du texte est décaléeDPI ou taille de page incorrectsRastérisez à 300 DPI avec la taille d'origine.
Le fichier de sortie est énormeImages sans perte à 600 DPIUtilisez --optimize / JPEG, ou réduisez le DPI.
Un PDF protégé par mot de passe échoueEntrée chiffréeDéchiffrez d'abord ou passez le mot de passe si l'outil le permet.

FAQ PDF

Comment rendre un PDF interrogeable ?

Utilisez ocrmypdf entree.pdf sortie.pdf, ou rastérisez les pages et lancez tesseract page.tif sortie pdf.

Pourquoi Tesseract ne lit-il pas un PDF directement ?

Tesseract reconnaît des images raster ; les pages du PDF doivent donc d'abord être converties en images.

Quel DPI utiliser ?

300 DPI pour la plupart des documents ; 600 DPI pour les petites polices ou l'archivage.

Puis-je OCR un PDF en Python ?

Oui — utilisez pdf2image avec poppler et pytesseract.image_to_pdf_or_hocr, puis fusionnez les pages avec pypdf.

Comment garder une mise en page précise ?

Conservez la taille et le DPI d'origine, et préférez OCRmyPDF, qui garde l'image et ajoute la couche de texte par-dessus.