Saltar al contenido principal
Guía para desarrolladores

Tesseract OCR para PDF
y PDF buscables.

La guía completa y probada para aplicar OCR a PDF con Tesseract: rasterizar páginas, crear PDF buscables, usar OCRmyPDF y pdfsandwich, ejecutarlo de principio a fin en Python y resolver los errores más habituales.

Resumen (un comando)

Para un PDF multipágina real, OCRmyPDF es la vía más rápida.

bash
pip install ocrmypdf      # o: apt install ocrmypdf
ocrmypdf entrada.pdf salida.pdf

¿Sin OCRmyPDF? Rasteriza y usa la CLI de Tesseract directamente, como se explica abajo.

Por qué hay que rasterizar los PDF

Tesseract reconoce imágenes, no contenedores PDF.

Un PDF es un contenedor: puede incluir texto vectorial, fuentes incrustadas o imágenes de páginas escaneadas. Tesseract lee imágenes ráster (TIFF, PNG, JPEG, WebP…), así que las páginas deben convertirse a imágenes primero. Elige el rasterizador según lo que tengas instalado:

HerramientaInstalaciónNotas
pdftoppm (poppler)apt install poppler-utilsRápido, scriptable, la opción clásica
pdftocairo (poppler)poppler-utilsSimilar a pdftoppm, salida Cairo
ImageMagickapt install imagemagickconvert -density 300 in.pdf out.tif
PyMuPDFpip install pymupdfPython puro, sin binarios externos
pdf2imagepip install pdf2imageWrapper de Python sobre poppler
bash
# PDF -> un PNG por página a 300 DPI
pdftoppm -png -r 300 entrada.pdf pagina

El DPI es lo más importante: 300 DPI es el equilibrio estándar; 600 DPI para fuentes pequeñas o archivo; evita por debajo de 200 DPI.

Crear un PDF buscable con la CLI de Tesseract

Una imagen se convierte en una página de PDF buscable con la configuración de salida pdf.

bash
# Imagen -> PDF buscable
tesseract pagina-1.png salida pdf

# Solo capa de texto (sin imagen visible)
tesseract escaneo.png salida textonly_pdf

# Varias páginas en un PDF: pasa una lista de imágenes
tesseract listaimagenes.txt salida pdf

Para un PDF multipágina, pon cada ruta de imagen en su propia línea en listaimagenes.txt. Referencia completa de formatos: documentación.

Método B — OCRmyPDF (recomendado para PDF reales)

OCRmyPDF se encarga de rasterizar, OCR, enderezar, rotar y la capa de texto invisible en un solo comando.

bash
ocrmypdf entrada.pdf salida.pdf                    # básico
ocrmypdf -l eng+spa entrada.pdf salida.pdf         # idiomas
ocrmypdf --deskew --rotate-pages entrada.pdf salida.pdf
ocrmypdf --optimize 2 entrada.pdf salida.pdf       # reduce el archivo
ocrmypdf --skip-text entrada.pdf salida.pdf        # conserva páginas con texto

OCRmyPDF usa Tesseract por debajo y requiere Ghostscript y las herramientas de poppler. Opciones útiles: --force-ocr, --redo-ocr, --pages 1-10.

Método C — pdfsandwich

Un wrapper más ligero que añade una capa de texto y aplica preprocesado como el enderezado.

bash
pdfsandwich escaneo.pdf          # genera escaneo_ocr.pdf
pdfsandwich -lang eng+spa escaneo.pdf

Método D — Python de principio a fin

Usa pdf2image para rasterizar y pytesseract para construir el PDF buscable, y combina con pypdf.

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

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

En Windows, pasa la carpeta bin de poppler con poppler_path=. Más detalle en la guía de pytesseract.

¿Qué método debo usar?

MétodoIdeal paraConfiguraciónMultipágina
OCRmyPDFPDF reales, automatizaciónGhostscript + popplerSí, en un comando
pdfsandwichCapa de texto rápida con preprocesadopoppler + ImageMagickSí
CLI de TesseractImágenes o listas de imágenesSolo TesseractCon una lista de imágenes
Python (pdf2image)Pipelines y lógica personalizadapoppler + pytesseractBucle y combinación

Fidelidad de diseño y superposición de texto

Por qué los PDF buscables a veces se ven desalineados y cómo mantener la geometría.

Calidad y rendimiento

Solución de problemas

SíntomaCausaSolución
Unable to get page count. Is poppler installed?pdf2image no encuentra popplerInstala poppler-utils o define poppler_path en Windows.
El PDF de salida no tiene texto buscableEl OCR no se ejecutó o el idioma es incorrectoConfirma el éxito y define -l/--language al idioma del documento.
La superposición de texto está desalineadaDPI o tamaño de página incorrectosRasteriza a 300 DPI con el tamaño original.
El archivo de salida es enormeImágenes sin pérdida a 600 DPIUsa --optimize / JPEG, o reduce el DPI.
Falla un PDF protegido con contraseñaEntrada cifradaDescífralo primero o pasa la contraseña si tu herramienta lo admite.

Preguntas frecuentes de PDF

¿Cómo hago que un PDF sea buscable?

Usa ocrmypdf entrada.pdf salida.pdf, o rasteriza las páginas y ejecuta tesseract pagina.tif salida pdf.

¿Por qué Tesseract no lee un PDF directamente?

Tesseract reconoce imágenes ráster, así que las páginas del PDF deben convertirse a imágenes primero.

¿Qué DPI debo usar?

300 DPI para la mayoría de documentos; 600 DPI para fuentes pequeñas o archivo.

¿Puedo aplicar OCR a un PDF en Python?

Sí: usa pdf2image con poppler y pytesseract.image_to_pdf_or_hocr, y combina las páginas con pypdf.

¿Cómo mantengo el diseño preciso?

Coincide el tamaño y el DPI originales, y prefiere OCRmyPDF, que conserva la imagen y añade la capa de texto encima.