OCRmyPDF como API
Envía un PDF escaneado o una imagen y recíbelo como PDF/A con búsqueda. OCRmyPDF y Tesseract, alojados, con una sola clave de API.
Última actualización
| Precio | 2 créditos por página. Una imagen cuenta como una página. |
|---|---|
| Archivos | PDF, PNG o JPEG, de hasta 25 MB y 200 páginas |
| Idiomas | Inglés, alemán, español y francés |
| Salida | PDF/A-2b por defecto, o un PDF normal |
| Límite de tiempo | 15 minutos por trabajo |
| Resultados | Se guardan 7 días tras el envío |
OCRmyPDF añade una capa de texto a PDF escaneados e imágenes. Las páginas se ven igual, pero puedes buscar, seleccionar y copiar su texto. Tesseract reconoce el texto.
Envías un archivo a la cola y recibes un id de trabajo. Cuando el trabajo termina bien, descargas el PDF con búsqueda. La salida es PDF/A-2b para el archivo a largo plazo, salvo que pidas un PDF normal.
Precio y límites
Un trabajo cuesta 2 créditos por página, y una imagen cuenta como una página. Los créditos se cobran al enviar el trabajo. Si el trabajo falla, se reembolsan.
Un archivo puede tener hasta 25 MB y 200 páginas. Un trabajo se detiene a los 15 minutos. El resultado se guarda 7 días tras el envío y después se elimina. El archivo subido se elimina en cuanto termina el trabajo. Los planes y las cuotas de créditos están en la página de precios.
Alojado por ti o aquí
Para ejecutar OCRmyPDF tú, lo instalas con Tesseract y un paquete de idioma por idioma. Mantienes ambos al día y das a cada trabajo un límite de tiempo y de memoria. Un escaneo largo puede usar varios GB de memoria.
Alojado aquí, envías el archivo con una clave de API. La misma clave y el mismo saldo de créditos sirven para los demás motores de documentos de este sitio.
Inicio rápido con curl
Envía un escaneo. La parte type= fija el tipo de contenido del archivo:
curl -H "X-API-Key: $KEY" \
-F "file=@scan.pdf;type=application/pdf" \
-F language=deu -F rotate_pages=true \
https://api.pagespool.com/v1/ocrmypdf/jobs
La respuesta indica el trabajo y lo que cuesta:
{"job_id": "3f2a…", "status": "queued", "pages": 3, "credits": 6, "poll_url": "/v1/jobs/3f2a…", "result_url": "/v1/ocrmypdf/jobs/3f2a…/result"}
Consulta el trabajo hasta que status sea succeeded o failed:
curl -H "X-API-Key: $KEY" https://api.pagespool.com/v1/jobs/JOB_ID
Después descarga el PDF con búsqueda:
curl -H "X-API-Key: $KEY" -o scan-ocr.pdf https://api.pagespool.com/v1/ocrmypdf/jobs/JOB_ID/result
Consultar y descargar es gratis.
Inicio rápido con Python
import time
import httpx
API = "https://api.pagespool.com"
headers = {"X-API-Key": "YOUR_KEY"}
with open("scan.pdf", "rb") as fh:
resp = httpx.post(
f"{API}/v1/ocrmypdf/jobs",
headers=headers,
files={"file": ("scan.pdf", fh, "application/pdf")},
data={"language": "eng", "deskew": "true"},
timeout=120,
)
resp.raise_for_status()
job = resp.json()
while httpx.get(f"{API}{job['poll_url']}", headers=headers).json()["status"] not in (
"succeeded",
"failed",
):
time.sleep(5)
result = httpx.get(f"{API}{job['result_url']}", headers=headers, timeout=120)
result.raise_for_status() # a failed job answers its reason as a problem
with open("scan-ocr.pdf", "wb") as out:
out.write(result.content)
Opciones
Envía las opciones como campos de formulario junto a file:
| Campo | Valores | Por defecto |
|---|---|---|
language |
eng, deu, spa, fra |
eng |
output_type |
pdfa (PDF/A-2b), pdf |
pdfa |
mode |
skip, redo, force |
skip |
deskew |
true, false |
false |
rotate_pages |
true, false |
false |
mode decide qué pasa con las páginas que ya tienen texto. skip las deja como están. redo sustituye una capa de OCR anterior. force aplica OCR a cada página como imagen. mode=redo no se puede combinar con deskew. Esa solicitud responde 400 y no cuesta nada.
Errores
Cada error es un documento de problema JSON con un code. Un envío rechazado no cuesta nada. Un trabajo fallido se reembolsa, y su URL de resultado indica el motivo:
| Código | Estado | Significado |
|---|---|---|
incompatible_options |
400 | mode=redo junto con deskew |
payload_too_large |
413 | El archivo ocupa más de 25 MB |
unsupported_media_type |
415 | El archivo no es un PDF, PNG o JPEG |
too_many_pages |
422 | El archivo tiene más de 200 páginas |
bad_input |
422 | El archivo no se puede leer, o una imagen tiene transparencia |
encrypted_pdf |
422 | El PDF necesita una contraseña para abrirse |
already_has_text |
409 | Las páginas ya tienen texto: envía mode=redo o mode=force |
pdfa_conversion_failed |
422 | El resultado no es un PDF/A válido: envía output_type=pdf |
job_not_ready |
409 | El trabajo aún no ha terminado |
result_expired |
410 | El resultado se eliminó tras 7 días |
ocr_failed, ocr_timeout |
500 | El OCR falló o duró más de 15 minutos |
Claves de API
Cada llamada de OCR necesita una clave de API. Sin una clave válida, la llamada responde 401. Puedes enviar la clave de tres formas:
- la cabecera
X-API-Key: YOUR_KEY, - la cabecera
Authorization: Bearer YOUR_KEY, - HTTP Basic con cualquier nombre de usuario y la clave como contraseña, como
curl -u "x:YOUR_KEY". Un cliente que solo acepta una URL base puede llevar la clave en ella, comohttps://x:YOUR_KEY@seguido del host de la API.
No pongas nunca la clave en una ruta ni en una query string. Ambas acaban en los registros de acceso.
Servidor MCP
OCRmyPDF tiene su propio servidor MCP en https://api.pagespool.com/mcp/ocrmypdf/. Ofrece dos herramientas. ocr_pdf pone un archivo en cola, enviado en base64 de hasta 4 MB o como enlace de descarga de hasta 25 MB. get_ocr_result informa del trabajo y, cuando ha terminado bien, da un enlace de descarga al PDF que funciona 60 minutos. Las herramientas necesitan una clave de API y cuestan lo mismo que la API.
Pruébalo sin código
La herramienta gratuita de OCR aplica el mismo OCR a archivos de hasta 3 páginas y 4 MB, sin cuenta.
OCRmyPDF es una marca de su titular; pagespool no está afiliado a él.