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.
pip install ocrmypdf # ou : apt install ocrmypdf
ocrmypdf entree.pdf sortie.pdfPas 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é :
| Outil | Installation | Remarques |
|---|---|---|
pdftoppm (poppler) | apt install poppler-utils | Rapide, scriptable, le choix classique |
pdftocairo (poppler) | poppler-utils | Similaire à pdftoppm, sortie Cairo |
| ImageMagick | apt install imagemagick | convert -density 300 in.pdf out.tif |
| PyMuPDF | pip install pymupdf | Python pur, sans binaires externes |
| pdf2image | pip install pdf2image | Wrapper Python autour de poppler |
# PDF -> un PNG par page à 300 DPI
pdftoppm -png -r 300 entree.pdf pageLe 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.
# 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 pdfPour 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.
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 texteOCRmyPDF 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.
pdfsandwich scan.pdf # génère scan_ocr.pdf
pdfsandwich -lang eng+fra scan.pdfMéthode D — Python de bout en bout
Utilisez pdf2image pour rastériser et pytesseract pour construire le PDF interrogeable, puis fusionnez avec pypdf.
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éthode | Idéal pour | Configuration | Multipage |
|---|---|---|---|
| OCRmyPDF | Vrais PDF, automatisation | Ghostscript + poppler | Oui, en une commande |
| pdfsandwich | Couche de texte rapide avec prétraitement | poppler + ImageMagick | Oui |
| CLI Tesseract | Images ou listes d'images | Tesseract uniquement | Via une liste d'images |
| Python (pdf2image) | Pipelines et logique personnalisée | poppler + pytesseract | Boucle 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.
- La couche de texte invisible est placée à partir des boîtes de mots de l'OCR ; un mauvais DPI peut la faire dériver.
- Utilisez la sortie
hOCRouALTOpour des coordonnées exactes (surlignage, archivage). pdftoppm -r 300et la même taille de page gardent la superposition alignée.- Pour les mises en page complexes, préférez OCRmyPDF, qui conserve l'image d'origine et ajoute la couche sur place.
Qualité et performance
- DPI : 300 standard, 600 pour les petites polices ou l'archivage.
- Plages de pages : ne traitez que le nécessaire (
--pagesdans OCRmyPDF). - Parallélisme : OCR des pages en parallèle puis fusion.
- Taille :
--optimize/ compression JPEG, ou réduisez le DPI après l'OCR. - Prétraitement : redressez et débruitez avant l'OCR.
Dépannage
| Symptôme | Cause | Solution |
|---|---|---|
Unable to get page count. Is poppler installed? | pdf2image ne trouve pas poppler | Installez poppler-utils ou définissez poppler_path sous Windows. |
| Le PDF de sortie n'a pas de texte interrogeable | L'OCR n'a pas tourné ou mauvaise langue | Vérifiez le succès et définissez -l/--language sur la langue du document. |
| La superposition du texte est décalée | DPI ou taille de page incorrects | Rastérisez à 300 DPI avec la taille d'origine. |
| Le fichier de sortie est énorme | Images sans perte à 600 DPI | Utilisez --optimize / JPEG, ou réduisez le DPI. |
| Un PDF protégé par mot de passe échoue | Entrée chiffrée | Dé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.