Tesseract OCR para PDF
e PDFs pesquisáveis.
O guia completo e testado para aplicar OCR a PDF com o Tesseract: rasterizar páginas, criar PDFs pesquisáveis, usar OCRmyPDF e pdfsandwich, executá-lo de ponta a ponta em Python e corrigir os erros mais comuns.
Resumo (um comando)
Para um PDF real de várias páginas, o OCRmyPDF é o caminho mais rápido.
pip install ocrmypdf # ou: apt install ocrmypdf
ocrmypdf entrada.pdf saida.pdfSem o OCRmyPDF? Rasterize e use a CLI do Tesseract diretamente — veja abaixo.
Por que os PDFs precisam ser rasterizados
O Tesseract reconhece imagens, não contêineres PDF.
Um PDF é um contêiner: pode conter texto vetorial, fontes incorporadas ou imagens de páginas digitalizadas. O Tesseract lê imagens raster (TIFF, PNG, JPEG, WebP…), então as páginas precisam ser convertidas em imagens primeiro. Escolha o rasterizador conforme o que você tem instalado:
| Ferramenta | Instalação | Notas |
|---|---|---|
pdftoppm (poppler) | apt install poppler-utils | Rápido, scriptável, a escolha clássica |
pdftocairo (poppler) | poppler-utils | Semelhante ao pdftoppm, saída Cairo |
| ImageMagick | apt install imagemagick | convert -density 300 in.pdf out.tif |
| PyMuPDF | pip install pymupdf | Python puro, sem binários externos |
| pdf2image | pip install pdf2image | Wrapper de Python sobre o poppler |
# PDF -> um PNG por página a 300 DPI
pdftoppm -png -r 300 entrada.pdf paginaO DPI é o mais importante: 300 DPI é o equilíbrio padrão; 600 DPI para fontes pequenas ou arquivamento; evite abaixo de 200 DPI.
Criar um PDF pesquisável com a CLI do Tesseract
Uma imagem vira uma página de PDF pesquisável com a configuração de saída pdf.
# Imagem -> PDF pesquisável
tesseract pagina-1.png saida pdf
# Apenas camada de texto (sem imagem visível)
tesseract digitalizado.png saida textonly_pdf
# Várias páginas em um PDF: passe uma lista de imagens
tesseract listaimagens.txt saida pdfPara um PDF de várias páginas, coloque cada caminho de imagem em sua própria linha em listaimagens.txt. Referência completa de formatos: documentação.
Método B — OCRmyPDF (recomendado para PDFs reais)
O OCRmyPDF cuida de rasterizar, OCR, alinhamento, rotação e da camada de texto invisível em um comando.
ocrmypdf entrada.pdf saida.pdf # básico
ocrmypdf -l eng+por entrada.pdf saida.pdf # idiomas
ocrmypdf --deskew --rotate-pages entrada.pdf saida.pdf
ocrmypdf --optimize 2 entrada.pdf saida.pdf # reduz o arquivo
ocrmypdf --skip-text entrada.pdf saida.pdf # mantém páginas com textoO OCRmyPDF usa o Tesseract por baixo e requer Ghostscript e as ferramentas do poppler. Opções úteis: --force-ocr, --redo-ocr, --pages 1-10.
Método C — pdfsandwich
Um wrapper mais leve que adiciona uma camada de texto e aplica pré-processamento como alinhamento.
pdfsandwich digitalizado.pdf # gera digitalizado_ocr.pdf
pdfsandwich -lang eng+por digitalizado.pdfMétodo D — Python de ponta a ponta
Use pdf2image para rasterizar e pytesseract para montar o PDF pesquisável, depois combine com pypdf.
import io, pytesseract
from pdf2image import convert_from_path
from pypdf import PdfWriter, PdfReader
pages = convert_from_path("entrada.pdf", dpi=300) # precisa do poppler
writer = PdfWriter()
for page in pages:
pdf_bytes = pytesseract.image_to_pdf_or_hocr(page, extension="pdf", lang="por")
writer.add_page(PdfReader(io.BytesIO(pdf_bytes)).pages[0])
with open("saida.pdf", "wb") as f:
writer.write(f)No Windows, passe a pasta bin do poppler com poppler_path=. Mais detalhes no guia do pytesseract.
Qual método devo usar?
| Método | Ideal para | Configuração | Várias páginas |
|---|---|---|---|
| OCRmyPDF | PDFs reais, automação | Ghostscript + poppler | Sim, em um comando |
| pdfsandwich | Camada de texto rápida com pré-processamento | poppler + ImageMagick | Sim |
| CLI do Tesseract | Imagens ou listas de imagens | Apenas o Tesseract | Com uma lista de imagens |
| Python (pdf2image) | Pipelines e lógica personalizada | poppler + pytesseract | Loop e combinação |
Fidelidade de layout e sobreposição de texto
Por que os PDFs pesquisáveis às vezes parecem desalinhados e como manter a geometria.
- A camada de texto invisível é posicionada usando as caixas de palavras do OCR; se o DPI estiver errado, a sobreposição pode desviar.
- Use saída
hOCRouALTOquando precisar de coordenadas exatas para destaque ou arquivamento. pdftoppm -r 300e o mesmo tamanho da página original mantêm a sobreposição alinhada.- Para layouts complexos, prefira o OCRmyPDF, que preserva a imagem original e adiciona a camada no lugar.
Qualidade e desempenho
- DPI: 300 padrão, 600 para texto pequeno ou arquivamento.
- Intervalos de páginas: processe apenas o necessário (
--pagesno OCRmyPDF ou recorte a lista). - Paralelismo: aplique OCR às páginas em paralelo e depois combine.
- Tamanho: use
--optimize/ compressão JPEG, ou reduza o DPI após o OCR. - Pré-processamento: alinhe e remova ruído antes do OCR.
Solução de problemas
| Sintoma | Causa | Solução |
|---|---|---|
Unable to get page count. Is poppler installed? | O pdf2image não encontra o poppler | Instale poppler-utils ou defina poppler_path no Windows. |
| O PDF de saída não tem texto pesquisável | O OCR não foi executado ou o idioma está errado | Confirme o sucesso e defina -l/--language para o idioma do documento. |
| A sobreposição de texto está desalinhada | DPI ou tamanho de página errados | Rasterize a 300 DPI com o tamanho original. |
| O arquivo de saída é enorme | Imagens sem perdas a 600 DPI | Use --optimize / JPEG, ou reduza o DPI. |
| PDF protegido por senha falha | Entrada criptografada | Descriptografe primeiro ou passe a senha se a ferramenta suportar. |
Perguntas frequentes de PDF
Como torno um PDF pesquisável?
Use ocrmypdf entrada.pdf saida.pdf, ou rasterize as páginas e execute tesseract pagina.tif saida pdf.
Por que o Tesseract não lê um PDF diretamente?
O Tesseract reconhece imagens raster, então as páginas do PDF precisam ser convertidas em imagens primeiro.
Qual DPI devo usar?
300 DPI para a maioria dos documentos; 600 DPI para fontes pequenas ou arquivamento.
Posso aplicar OCR a um PDF em Python?
Sim: use pdf2image com poppler e pytesseract.image_to_pdf_or_hocr, e combine as páginas com pypdf.
Como mantenho o layout preciso?
Use o mesmo tamanho e DPI originais e prefira o OCRmyPDF, que preserva a imagem e adiciona a camada de texto por cima.