Conclusiones clave
- Conserva el archivo subido original y registra su suma de comprobación, tipo MIME, nombre de archivo y contexto de origen antes de procesarlo.
- Dirige los archivos PDF a /document/ocr. Considera /image/ocr para textos breves en imágenes y convierte las entradas de formatos de ofimática compatibles a PDF antes de aplicar OCR al documento.
- Trata la salida del OCR como datos derivados que necesitan validación en la aplicación, reglas de revisión y un vínculo al documento o la imagen de origen.
La recepción documental es un problema de enrutamiento antes que de OCR. Un pipeline confiable primero identifica lo que llegó, conserva el original, convierte solo cuando es necesario, extrae texto con el Robot adecuado y registra suficiente información de procedencia para explicar más adelante cada resultado que pueda encontrarse mediante búsquedas.
Lo más importante
- Separa la finalización de la Assembly de la publicación en el índice de búsqueda y verifica los archivos exportados necesarios antes de iniciar la indexación posterior.
- Usa identificadores idempotentes y rutas de salida con versiones cuando el mismo archivo de origen pueda volver a subirse o corregirse más adelante.
Empieza con un contrato de recepción
Un pipeline de documentos se complica cuando el primer paso acepta cualquier cosa y el último da por sentado que todo se entendió. Define el contrato de recepción antes de elegir los Robots: qué fuentes se permiten, qué considera la aplicación un documento, qué metadatos se requieren, cuál es el tamaño máximo de una subida y qué resultados esperan los sistemas posteriores. Aplica un límite de páginas en la aplicación antes de crear la Assembly; el ejemplo siguiente no limita las páginas. Los PDF grandes o con muchas páginas pueden superar la ventana fija de sondeo del Robot mientras esperan una tarea asíncrona de un proveedor, aunque esa tarea finalice más tarde. Reintentar con la misma entrada no amplía esta ventana; trata los tiempos de espera agotados repetidamente como un fallo y reduce o divide la entrada antes de volver a intentarlo.
Conserva el original subido como referencia inmutable. Un PDF normalizado, un archivo de texto OCR y un registro de búsqueda son derivados con diferentes ciclos de vida y modos de fallo. Asígnales una identidad compartida en la aplicación para que un revisor pueda pasar de un resultado de búsqueda a los bytes de origen que lo generaron. La navegación por páginas específicas requiere una correspondencia de páginas independiente.
Identifica el origen
Registra un ID de documento estable, la suma de verificación, el inquilino, quién lo subió, el nombre de archivo, el tipo MIME y la hora de recepción.
Asigna nombres a los resultados
Define si el flujo de trabajo devuelve un PDF normalizado, texto OCR, metadatos estructurados, miniaturas o todos estos resultados.
Separa los estados
Lleva un seguimiento independiente de los estados subido, normalizado, extraído, revisado, indexado y fallido.
Dirige cada entrada al Robot adecuado
La extensión de un nombre de archivo no indica si un PDF contiene texto seleccionable o solo píxeles escaneados. Usa el valor de ${file.mime} determinado por Transloadit y la política de la aplicación para dirigir las entradas. La determinación del tipo MIME combina metadatos integrados, información basada en la extensión y detección por contenido; la extensión puede prevalecer cuando no hay metadatos integrados disponibles. Este filtro no demuestra cuál es el contenido del archivo. Si tu contrato de recepción exige una validación estricta del contenido, valida los bytes almacenados en tu aplicación. /file/filter puede dirigir archivos mediante condiciones accepts o declines sobre ${file.mime}; usa error_on_decline cuando una entrada no admitida deba provocar el fallo de la Assembly.
Los PDF pueden pasar directamente a /document/ocr. Usa /image/ocr para textos breves en fotografías y capturas de pantalla; su documentación advierte que la exactitud puede ser menor en imágenes de documentos con mucho texto. Para entradas de documentos de oficina como DOCX, usa /document/convert para convertirlas a PDF, tras comprobar primero los formatos de entrada documentados. Este flujo de trabajo utiliza la salida en PDF de ese Robot; hay otros formatos de salida disponibles, pero el Robot no admite PDF como entrada. Un Robot puede omitir entradas que no acepta sin que falle la Assembly, así que añade un control explícito de MIME y verifica las salidas requeridas.
Rama de PDF
Ejecuta /document/ocr para los PDF, incluidos los PDF escaneados sin una capa de texto utilizable; elige json o text para generar un artefacto independiente. El formato meta, en cambio, almacena los datos de reconocimiento como ${file.meta.recognized_text} sin crear un archivo OCR. Usa la granularidad list para obtener cadenas; la granularidad predeterminada full almacena objetos de texto y de polígonos.
Rama de imágenes
Ejecuta /image/ocr para textos cortos en imágenes. Durante la preparación de la entrada, se vuelve a codificar la imagen como PNG cuando supera los 2000 píxeles por lado, no es JPEG/PNG o tiene metadatos de orientación; se ajusta a ese tamaño y se gira automáticamente cuando es necesario. Prueba con cuidado los documentos escaneados de contenido denso; la preparación de imágenes para convertirlas a PDF queda fuera del alcance de esta guía.
Rama de normalización
Convierte los formatos de oficina o de origen admitidos antes del OCR cuando el Robot de OCR no acepte el tipo original.
Conserva la procedencia en los resultados derivados
Es difícil confiar en un texto sin información de procedencia. Almacena el ID del documento de origen, la versión del resultado y la marca de tiempo de extracción junto con el texto extraído. El ejemplo de AWS que aparece a continuación devuelve JSON a nivel de documento sin indicar a qué página corresponde cada contenido. Para obtener resultados de búsqueda de páginas específicas, la aplicación debe dividir los PDF antes de la subida y registrar los números de página originales; esta preparación queda fuera del alcance de la guía. El ejemplo permite solo una entrada por Assembly y usa nombres de objeto fijos. Un pipeline por páginas necesita una Assembly por página con claves de objeto que identifiquen la página y una correspondencia con el documento principal. Reutilizar los mismos valores de document_id y output_version para varias páginas sobrescribiría sus objetos. Nunca deduzcas la correspondencia a partir del orden del array de OCR. Si se reemplaza el original, crea una nueva versión y deja que el indexador retire el registro anterior solo después de verificar el nuevo resultado.
Mantén el texto OCR separado del documento normalizado. Un revisor puede necesitar ver juntos el documento escaneado original, el PDF convertido y el texto extraído. Esa relación también resulta útil cuando otro proveedor de OCR produce un mejor resultado.
Usa una identidad estable
El ID de origen debería conservarse entre reintentos, mientras que cada resultado derivado recibe una versión.
El resultado no incluye el contexto de página
Conserva los enlaces al origen de cada resultado. El resultado de AWS no incluye números de página; la navegación por páginas necesita la correspondencia registrada al crear las entradas de una página.
No sobrescribas las correcciones
Una subida corregida debería crear una nueva versión y un evento explícito de reemplazo.
Haz explícitas la revisión y la indexación
El valor ok de Assembly Status ASSEMBLY_COMPLETED, observado mediante sondeo o notificaciones, significa que ningún error que no se hubiera ignorado detuvo la Assembly y que sus tareas declaradas, incluidas las de almacenamiento, finalizaron. Un Step puede omitir una entrada, y ignore_errors puede suprimir un fallo de un Step, por lo que la finalización por sí sola no demuestra que existan los artefactos requeridos. Tampoco significa que el índice de búsqueda de tu aplicación haya aceptado el texto ni que una persona haya aprobado un registro sensible. Publica un evento para los sistemas posteriores solo después de que los resultados que necesitas existan y hayan superado sus verificaciones.
/document/ocr no expone puntuaciones de confianza, por lo que este Template no puede enrutar según un umbral de confianza del proveedor. Usa comprobaciones automatizadas en la aplicación para activar la revisión humana: archivos de salida ausentes, texto extraído vacío, una cantidad de texto inverosímilmente pequeña para el número de páginas informado, frases esperadas ausentes o una clase de documento que implique consecuencias importantes. Para documentos comunes, una ruta automatizada aún puede registrar las comprobaciones y conservar una forma de volver a procesar el original.
Verifica las salidas
Comprueba los archivos esperados, los recuentos de páginas, que el texto no esté vacío y los metadatos antes de indexar.
Revisa las excepciones
Usa una cola de revisión humana para los resultados ambiguos o que impliquen consecuencias importantes, en lugar de publicarlos sin revisión.
Indexa de forma idempotente
Usa el ID del original y la versión de salida como clave del índice para que los reintentos no dupliquen registros.
Versiona las correcciones sin perder evidencia
Las correcciones del OCR y los reemplazos del original deberían crear una nueva versión derivada. Conserva el original anterior, la salida y la decisión de revisión durante el tiempo que exija tu política de retención, para poder explicar un resultado del índice después de una corrección.
Usa el ID del documento y la versión de salida como clave de indexación. Reutiliza una versión solo al reintentar el mismo intento de procesamiento; asigna una nueva versión para correcciones, cambios de proveedor o reprocesamientos deliberados. Serializa las escrituras de una versión para que los reintentos concurrentes no puedan sobrescribir un resultado aceptado más reciente.
Conserva el original
Mantén disponibles los bytes originales para su revisión y para futuros cambios en los ajustes de OCR o de proveedor.
Reemplaza de forma atómica
Publica la nueva versión del índice solo después de verificar los archivos que requiere y su estado de revisión.
Empieza con un Template acotado para PDF
El ejemplo siguiente implementa únicamente la rama de PDF: permite como máximo una subida, rechaza los tipos MIME que no sean PDF, solicita JSON de OCR de AWS y exporta el original y el JSON a claves fijas independientes bajo una sola versión del documento controlada por la aplicación. Guarda este JSON como contenido de un Template almacenado, no como parámetros completos de una solicitud de Assembly. Tu servidor proporciona la Auth Key y la firma al crear la Assembly. Prueba PDF representativos para evaluar la estructura de los resultados, la utilidad del texto y el comportamiento ante fallos antes de ampliar la configuración de ejemplo. auth.max_size limita el total de bytes de subida previstos, incluida la sobrecarga de las solicitudes: 104857600 bytes equivalen a 100 MiB, no a una asignación por archivo. No garantiza el rechazo antes de que una subida reanudable transfiera bytes ni que el OCR finalice.
Crea una cuenta de Transloadit y guarda las Assembly Instructions como un Template. Crea una credencial de Template para S3 llamada document-output con estos campos: key, secret, bucket y bucket_region; consulta credenciales de Template para configurarla. Para esta configuración de ejemplo, el servidor debe construir y enviar la solicitud completa de la Assembly, incluida la subida, en lugar de entregar los params firmados a un navegador. Debe proporcionar y validar valores de document_id y output_version no vacíos, autorizados y seguros para su uso en rutas en los campos de la solicitud. Estos se convierten en las variables ${fields.document_id} y ${fields.output_version} de las rutas de almacenamiento. Los campos multipart también aportan campos a la Assembly y no están cubiertos por la firma de params, por lo que la firma por sí sola no autoriza un prefijo de almacenamiento. No reenvíes campos proporcionados por el cliente. Verifica que las claves de almacenamiento devueltas coincidan con el prefijo esperado por el servidor antes de indexar. Guarda allow_steps_override: false en el Template almacenado para impedir que se sobrescriban los Steps en tiempo de ejecución al usar template_id. Mantén el bucket privado con Block Public Access habilitado y comprueba la autorización de quien accede a su contenido; acl: bucket-default omite la ACL del objeto y depende de la política de acceso del bucket.
Este ejemplo fija provider: aws para que la elección del proveedor sea explícita, sin garantizar respuestas idénticas. El valor predeterminado es auto. Usa los límites actuales de AWS Textract como referencia autorizada para los idiomas que admite AWS. Comprueba lo que admite cada proveedor antes de elegir AWS o GCP; sus estructuras JSON difieren. Prueba los idiomas y las disposiciones de tus documentos con el proveedor elegido y ten en cuenta que las respuestas pueden cambiar a medida que evolucionan los modelos del proveedor.
El ejemplo usa format: "json" con granularity: "list" para exportar un array de cadenas de líneas reconocidas destinado a la indexación y a las comprobaciones del volumen de texto. Esto evita la mezcla de entradas de página, línea y palabra del archivo resultante predeterminado con granularidad full, que puede repetir texto. En cambio, format: "text" exporta texto sin formato y fuerza la granularidad list. Ninguna de las dos salidas incluye la atribución de página ni puntuaciones de confianza. Si eliges la granularidad full, sus puntos de polígono opcionales usan un valor de ancho y uno de alto tomados de los metadatos del PDF y se convierten en ceros cuando faltan esas dimensiones. Valídalos antes de usarlos en superposiciones y nunca deduzcas la identidad de una página a partir de los polígonos ni del orden del array.
Una tarea de OCR completada con éxito aún puede omitir texto o reconocerlo incorrectamente. Comprueba ambos objetos exportados y contrasta el volumen de texto extraído con el número de páginas informado; envía los resultados sospechosos a revisión humana. Esas comprobaciones automatizadas señalan problemas, pero no demuestran que el reconocimiento sea completo o exacto; compara los resultados con texto conocido de documentos originales representativos antes de publicarlos.
Las claves de objeto fijas source.pdf y ocr.json hacen que los reintentos apunten a las mismas ubicaciones de almacenamiento para una versión del documento. No eliminan Assemblies duplicadas ni hacen que el OCR sea determinista; la aplicación debe serializar los reintentos y conservar la asignación correspondiente al resultado aceptado. Compara los cargos de los proveedores mediante los precios de Transloadit, incluyendo el volumen de páginas y otros procesos del flujo de trabajo. El cargo por página del OCR, específico de cada proveedor, se calcula a partir del valor page_count informado para la entrada; compara los cargos actuales antes de estimar el costo del flujo de trabajo completo.
{
"allow_steps_override": false,
"auth": {
"max_number_of_files": 1,
"max_size": 104857600
},
"steps": {
":original": {
"robot": "/upload/handle"
},
"pdf_only": {
"use": ":original",
"robot": "/file/filter",
"accepts": [["${file.mime}", "==", "application/pdf"]],
"error_on_decline": true,
"error_msg": "Upload a PDF document"
},
"extracted_text": {
"use": "pdf_only",
"robot": "/document/ocr",
"provider": "aws",
"format": "json",
"granularity": "list",
"result": true
},
"stored_source": {
"use": "pdf_only",
"robot": "/s3/store",
"credentials": "document-output",
"path": "documents/${fields.document_id}/${fields.output_version}/source.pdf",
"acl": "bucket-default",
"result": true
},
"stored_text": {
"use": "extracted_text",
"robot": "/s3/store",
"credentials": "document-output",
"path": "documents/${fields.document_id}/${fields.output_version}/ocr.json",
"acl": "bucket-default",
"result": true
}
}
}Prueba entradas representativas
Verifica ambos objetos exportados, que el texto extraído no esté vacío y que el volumen de caracteres sea razonable para el número de páginas informado antes de indexar. Prueba el rechazo de archivos que no sean PDF y la gestión de reintentos.
Añade ramas de forma deliberada
Amplía la configuración de ejemplo para PDF con ramas de conversión y de OCR de imágenes solo cuando sus contratos de entrada sean explícitos.
Detalles técnicos que conviene conocer
- /document/ocr acepta PDF como entrada. /document/convert puede producir PDF a partir de los formatos de oficina documentados, pero no puede aceptar un PDF como entrada.
- Con format: json o format: text, /document/ocr devuelve un archivo resultante independiente. format: meta no crea ningún archivo resultante del OCR y almacena los datos del reconocimiento como ${file.meta.recognized_text}; su estructura depende de la granularidad. Ningún formato añade al PDF original una capa de texto que permita realizar búsquedas.
- Para AWS, el archivo resultante de /document/ocr con granularidad
fullcontiene texto mapeado y polígonos delimitadores opcionales, y descarta los números de página, los tipos de bloque y las puntuaciones de confianza del proveedor. Mezcla entradas de página, línea y palabra, por lo que el texto puede repetirse; en cambio, la granularidadlistdevuelve cadenas de líneas. - Un Robot puede omitir una entrada que no acepte. Para finalizar correctamente, una Assembly espera a que terminen las tareas declaradas, incluidas las de almacenamiento, pero las entradas omitidas y los errores ignorados siguen requiriendo que se verifiquen las salidas.
- /image/ocr vuelve a codificar la imagen a PNG, ajustándola a un máximo de 2000 píxeles por lado, cuando no es JPEG/PNG, supera esa dimensión o tiene metadatos de orientación. El reconocimiento de imágenes de documentos con mucho texto puede ser menos exacto que el de textos breves en fotos.
- auth.max_size limita el total de bytes de subida previstos para la Assembly, incluida la sobrecarga de la solicitud, en lugar de limitar cada archivo por separado; no garantiza el rechazo antes de que comience una transferencia reanudable.
- El cargo por página del OCR de documentos, específico de cada proveedor, se calcula utilizando el valor
page_countinformado para la entrada. Incluye el volumen de páginas previsto al comparar proveedores y estimar el costo del flujo de trabajo.
Un enfoque práctico
- 1
Guarda el Template para PDF y luego haz que tu servidor construya y envíe la solicitud completa de la Assembly con los campos autorizados document_id y output_version.
- 2
Rechaza los tipos MIME que no sean de PDF con el filtro del ejemplo; aplica cualquier límite de páginas en la aplicación antes del envío.
- 3
Almacena el texto del OCR o el archivo JSON junto con el documento de origen bajo una versión de documento compartida y conserva sus claves de objeto en la aplicación.
- 4
Envía el texto vacío, los resultados sin las frases esperadas o los resultados estructuralmente ambiguos a un proceso de revisión humana antes de habilitar su búsqueda.
Cuándo resulta útil Transloadit
El Template proporcionado cubre la recepción de archivos PDF enviados por el servidor, el OCR y el almacenamiento. La guía también describe ramas de conversión y de imágenes, pero no proporciona esos Templates; añádelos solo después de probar sus contratos de entrada.
Límite de la arquitectura
Transloadit puede normalizar los archivos subidos, extraer texto de entradas compatibles y exportar los archivos resultantes. No proporciona un sistema de gestión documental, un índice de búsqueda, una cola de revisión humana ni una garantía legal de que el OCR sea exacto.
Preguntas frecuentes
¿Puede el OCR permitir búsquedas de texto en cualquier PDF?
No. /document/ocr extrae el texto por separado; no añade una capa de texto al PDF de origen. La calidad del reconocimiento depende de la calidad del escaneo, el idioma, la disposición del contenido y el propio documento. Conserva el original y revisa los resultados cuando un error pueda tener consecuencias.
¿Debería convertir primero todos los documentos a PDF?
No. Convierte solo los formatos que necesiten normalización para el siguiente Robot. La conversión innecesaria añade trabajo y puede descartar estructuras específicas del formato de origen.
¿Dónde debería residir el índice de búsqueda?
En la aplicación o el servicio de búsqueda responsable de la localización de documentos. Transloadit puede preparar y exportar los datos de origen y los derivados, pero no es el catálogo de documentos ni el índice de búsqueda.
¿Cómo evito documentos duplicados después de un reintento?
Asigna al documento de origen un ID estable de la aplicación y a cada resultado derivado una versión. Haz que la operación de indexación reemplace esa versión de forma idempotente.