Leer campos de un formulario PDF
Un PDF rellenable esconde un formulario debajo de la página: cajas de texto, casillas, grupos de opciones y listas desplegables, cada uno con su propio nombre interno y valor actual. Esta API para leer campos de formulario PDF abre esa capa y le entrega un inventario completo en JSON, para que sepa exactamente qué contiene un formulario antes de intentar llenarlo, validarlo o enrutarlo a otro sistema.
Ejecútela online
Ejecute esto en nuestros servidores con su cuenta. Las herramientas gratuitas corren en su navegador; esta cobra de su saldo del KIT según el precio de arriba.
El problema que resuelve
Cualquiera que haya intentado autocompletar un trámite gubernamental, un cuestionario de admisión o la plantilla de contrato de un proveedor conoce el primer obstáculo: no puede llenar campos que no ve. Los nombres de campo suelen ser crípticos, inconsistentes o repetidos dentro del mismo documento, y las herramientas de autoría de PDF rara vez exportan un esquema limpio junto con el archivo. Este endpoint existe para desarrolladores que reciben PDFs de terceros — clientes, agencias, socios — y necesitan descubrir programáticamente la forma del formulario antes de escribir una sola línea de lógica de llenado.
Qué le devuelve
Llama a POST /pdf/form-read y recibe un task_id de inmediato. El resultado enumera cada campo de cada página: su nombre interno, su tipo (texto, casilla, botón de opción, lista de selección o marcador de firma), su valor actual y, cuando existen, las opciones permitidas en listas desplegables y grupos de opciones. Nada se infiere ni se adivina: es una lectura directa de lo que el diccionario AcroForm del documento realmente declara, así que el resultado coincide con lo que un visor como Acrobat mostraría campo por campo.
Una breve historia del PDF rellenable
Los formularios interactivos forman parte de la especificación PDF desde mediados de los años noventa, construidos sobre la tecnología AcroForm que Adobe heredó de su formato FDF anterior. Décadas después, buena parte de los trámites gubernamentales, de recursos humanos, de seguros y legales sigue circulando como estos PDF con formulario, precisamente porque el diseño es fijo y el modelo de datos está estandarizado. Esa estabilidad también explica por qué vale la pena leerlos de forma programática: la estructura de campos de un formulario bien construido rara vez cambia, así que un mapeo que construye una vez suele seguir funcionando.
Dónde encaja en su flujo
Trátelo como el paso de descubrimiento antes de cualquier lógica de llenado o validación. Lea una plantilla una sola vez para construir un mapa de campos, guárdelo en caché y úselo luego para impulsar la automatización siguiente: poblar el mismo formulario miles de veces, verificar que un PDF enviado tenga completos todos los campos obligatorios, o conciliar valores contra un registro de base de datos. Como cada llamada es una tarea pequeña y autónoma, encaja de forma natural al inicio de un flujo de admisión o incorporación.
Entrega y retención
Los resultados se entregan a un webhook firmado, la vía recomendada para automatización, o mediante un enlace firmado válido durante 24 horas. Los documentos y los datos extraídos se conservan solo durante la ventana de retención y luego se eliminan, y nada de lo que envía se usa jamás para entrenar un modelo. Una tarea fallida — un archivo dañado, un formulario sin AcroForm alguno — se reintenta tres veces y, si aun así no puede leerse, devuelve un error claro sin costo.
Qué puede hacer con ella
Mapear una plantilla externa desconocida
Un socio le envía un nuevo formulario de admisión que nunca ha visto. Lea sus campos una vez para descubrir los nombres internos y los tipos, y luego conecte su lógica de llenado sin abrir el PDF en una herramienta de escritorio.
Validar que un formulario esté completo antes de enviarlo
Antes de aceptar una solicitud llenada, vuelva a leer sus campos y verifique que cada caja de texto, casilla y campo de firma obligatorios tengan realmente un valor.
Construir un servicio dinámico de llenado de formularios
Soporte muchas plantillas PDF distintas de clientes en un solo flujo leyendo el mapa de campos de cada formulario en la primera carga y guardándolo en caché, en lugar de codificar nombres de campo por plantilla.
Auditar qué campos expone realmente un formulario
Confirme que una plantilla PDF generada o descargada siga exponiendo los campos esperados después de una actualización, detectando campos rotos silenciosamente antes de que lleguen a los usuarios finales.
Preguntas frecuentes
¿Cómo leo los campos de un formulario PDF con una API?
Envíe el documento a POST /pdf/form-read, que devuelve un task_id de inmediato. La lista completa de nombres de campo, tipos y valores actuales se entrega luego como JSON a su webhook firmado o a un enlace firmado.
¿La API para leer campos de formulario PDF es gratis?
No hay capa gratuita: las capas gratis se abusan y ralentizan a todos. El acceso funciona con un saldo prepago de ForHosting KIT: se recarga desde $10.00 (no caduca) y cada solicitud se cobra a su precio publicado, así que una llamada sin saldo devuelve HTTP 402. Sin suscripción, sin tokens ni créditos inventados, y una tarea fallida no se cobra.
¿Qué tipos de campo detecta?
Campos de texto, casillas de verificación, grupos de botones de opción, listas de selección (desplegables y de lista) y marcadores de campo de firma, todo lo declarado en el AcroForm del documento, junto con el valor actual de cada campo.
¿Qué pasa si el PDF no tiene formulario rellenable?
Si el documento no lleva ningún diccionario AcroForm, la respuesta simplemente reporta una lista de campos vacía en lugar de un error, ya que un PDF sin formulario es un resultado válido, aunque poco interesante.
¿Devuelve los valores que la gente ya escribió?
Sí. El valor actual de cada campo se incluye junto con su nombre y tipo, así que puede leer un formulario ya parcial o totalmente llenado, no solo su estructura vacía.
¿Puedo leer muchos PDF por lote?
Sí. Cada llamada es una tarea asíncrona independiente, así que puede enviar lotes grandes en paralelo y recoger cada lista de campos por webhook a medida que se completa.
¿Leer los campos también me permite llenarlos con este endpoint?
No, esta capacidad es de solo lectura: inventaría el formulario. El llenado y la escritura de valores se manejan con una operación separada una vez que conoce los nombres de campo.
¿Qué pasa con un PDF escaneado que solo parece un formulario?
Una imagen escaneada no tiene campos AcroForm reales que leer, solo píxeles planos, así que la lista de campos vuelve vacía. Este endpoint lee la capa de formulario, no el diseño visual.
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, y pronto desde nuestra app, el email y Telegram.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/pdf/form-read \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"pdf":"https://ejemplo.com/documento.pdf"}'const res = await fetch("https://api.kit.forhosting.com/pdf/form-read", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"pdf": "https://ejemplo.com/documento.pdf"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/pdf/form-read",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"pdf": "https://ejemplo.com/documento.pdf"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/pdf/form-read", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"pdf":"https://ejemplo.com/documento.pdf"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"pdf":"https://ejemplo.com/documento.pdf"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/pdf/form-read", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"pdf": "https://ejemplo.com/documento.pdf"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "pdf.form_read",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Límites
max_mb | 25 |
max_pages | 200 |
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |
413 | input_too_large | El archivo supera el límite de tamaño. |