Aplane campos de formulario PDF como contenido estático
Ada (Countess) Lovelace escrito en una casilla de la página 1 y una casilla marcada en la página 2 pasan a ser contenido fijo, y el informe confirma que ambas se aplanaron. El formulario ya no tiene casillas activas que alguien pueda editar. Gratis en su navegador.
- Gratis
- Funciona en su navegador
- Sin registro
- Sus datos no salen de su equipo
Ejecutar — gratis
Convierta un formulario PDF interactivo ya completado en una representación estable donde los valores introducidos formen parte del contenido de cada página. Esta capacidad recibe el contenido de las páginas y las definiciones de los campos, valida cada valor y ubicación, genera operaciones de apariencia estáticas y deterministas, elimina la colección interactiva e informa con precisión qué campos fueron aplanados. Está pensada para automatizaciones fiables después de analizar, completar y aprobar un PDF, y devuelve un error claro cuando el formulario no contiene campos.
Qué cambia al aplanar un formulario completado
Un PDF rellenado puede parecer terminado aunque todavía contenga controles editables. Los cuadros de texto, casillas, listas, botones de opción y valores visibles de firma pueden seguir separados de las instrucciones gráficas normales de cada página. Esta diferencia importa cuando un documento completado pasa a entrega, impresión o archivo: un visor puede mostrar o modificar el control, y distintos lectores pueden representar su apariencia de modo desigual.
Esta capacidad toma los valores facilitados y escribe una operación de apariencia estática en el contenido de la página correspondiente. La operación queda limitada al rectángulo indicado, utiliza números con formato estable y escapa los caracteres con significado especial en cadenas PDF. Al terminar, la colección de campos interactivos devuelta está vacía.
Los valores visibles viajan así con el modelo de contenido, sin depender de controles activos. El resultado también incluye un informe campo por campo en el orden de entrada, para que su proceso registre exactamente qué cambió.
Cómo preparar correctamente páginas y valores
Envíe al menos una página, identificada por un número positivo y único, junto con su flujo de contenido estático existente representado como texto. Añada después cada campo rellenado con nombre único, número de página, tipo, valor de texto y coordenadas del rectángulo en puntos PDF. Se admiten campos de texto, casillas, botones de opción, selecciones y firmas.
Los valores son cadenas porque el aplanado utiliza el valor mostrado; por ejemplo, una casilla marcada puede usar «Yes» y una selección su etiqueta elegida. Cada campo debe señalar una página existente, y su anchura y altura deben ser mayores que cero. Todas las coordenadas y dimensiones deben ser números finitos.
La validación es deliberadamente estricta: nombres o páginas duplicados, tipos desconocidos, geometría inválida, páginas ausentes o valores que no sean texto provocan un error claro en lugar de un resultado parcial. Sobre todo, una lista vacía se rechaza expresamente para impedir que una operación sin efecto parezca satisfactoria.
Cómo usar el informe en un flujo documental fiable
Sitúe esta transformación después de completar y aprobar los campos, pero antes de la entrega final o del empaquetado para archivo. El resultado contiene las páginas ordenadas por número, su contenido original seguido de las operaciones de apariencia generadas, una colección de campos vacía, el recuento aplanado y el informe detallado. Cada entrada del informe conserva el nombre, la página, el tipo y el valor visible originales.
Compare el recuento con la cantidad prevista por su proceso o guarde el informe junto al registro de auditoría para simplificar cualquier investigación posterior. Esa determinación facilita pruebas de referencia, hashes de contenido, reintentos y compilaciones reproducibles. La capacidad modela la fase de aplanado, no el análisis de bytes PDF; un sistema binario debe analizar antes las páginas y los campos AcroForm y serializar después el modelo estático devuelto.
Qué puede hacer con ella
Finalizar una solicitud aprobada
Integre los valores del solicitante en el contenido de las páginas después de la revisión y conserve el informe con el expediente.
Estabilizar formularios antes de imprimir
Elimine la dependencia de controles interactivos para representar los valores mediante operaciones gráficas deterministas.
Preguntas frecuentes
¿Cuánto cuesta esta capacidad?
La versión del navegador emplea la misma transformación determinista.
¿Qué ocurre si el formulario no tiene campos?
La solicitud falla con un error de entrada no válida que indica que el formulario PDF no contiene campos. Nunca se declara aplanado un formulario vacío.
¿Qué tipos de campo admite?
Se admiten texto, casilla, botón de opción, selección y firma. La cadena proporcionada se trata como el valor visible del campo.
¿Analiza directamente un archivo PDF binario?
No. Transforma de forma determinista el contenido de página y los valores ya analizados. Un proceso binario debe analizar antes y serializar después.
¿Los paréntesis u otros signos de un nombre estropean la página?
No. Los caracteres que tienen un significado especial dentro de un PDF se protegen al escribirlos, así que un nombre como Ada (Countess) Lovelace queda tal como se rellenó. Además, cada valor se recorta al rectángulo de su casilla y no invade el resto de la página.
Herramientas relacionadas
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, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/pdf/flatten-form \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"pages":[{"number":1,"content":"q 1 0 0 1 0 0 cm Q"}],"fields":[{"name":"full_name","page":1,"type":"text","value":"Ada Lovelace","x":72,"y":680,"width":220,"height":18}]}'const res = await fetch("https://api.kit.forhosting.com/pdf/flatten-form", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"pages": [
{
"number": 1,
"content": "q 1 0 0 1 0 0 cm Q"
}
],
"fields": [
{
"name": "full_name",
"page": 1,
"type": "text",
"value": "Ada Lovelace",
"x": 72,
"y": 680,
"width": 220,
"height": 18
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/pdf/flatten-form",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"pages": [
{
"number": 1,
"content": "q 1 0 0 1 0 0 cm Q"
}
],
"fields": [
{
"name": "full_name",
"page": 1,
"type": "text",
"value": "Ada Lovelace",
"x": 72,
"y": 680,
"width": 220,
"height": 18
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/pdf/flatten-form", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"pages":[{"number":1,"content":"q 1 0 0 1 0 0 cm Q"}],"fields":[{"name":"full_name","page":1,"type":"text","value":"Ada Lovelace","x":72,"y":680,"width":220,"height":18}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"pages":[{"number":1,"content":"q 1 0 0 1 0 0 cm Q"}],"fields":[{"name":"full_name","page":1,"type":"text","value":"Ada Lovelace","x":72,"y":680,"width":220,"height":18}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/pdf/flatten-form", 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
{
"pages": [
{
"number": 1,
"content": "q 1 0 0 1 0 0 cm Q"
}
],
"fields": [
{
"name": "full_name",
"page": 1,
"type": "text",
"value": "Ada Lovelace",
"x": 72,
"y": 680,
"width": 220,
"height": 18
}
]
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "pdf.flatten_form",
"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. |
Notas técnicas
Cómo usar el informe en un flujo documental fiable
Como el algoritmo no usa red, decisiones aleatorias, reloj ni estado mutable compartido, una misma entrada siempre produce el mismo JSON.
Casos de integración
Verificar un proceso documental automático
Compare flattened_count y flattened_fields con el esquema esperado antes de serializar, entregar o archivar.
Preguntas técnicas
¿El resultado identifica los campos aplanados?
Sí. flattened_fields informa del nombre, página, tipo y valor de cada campo, y flattened_count ofrece el total.