Extraer tablas de un PDF
Una página cuyos valores se alinean con tabuladores, como Cable, 25 y 1,20, se convierte en una tabla con tres columnas con nombre y tres filas de datos. Un párrafo sin columnas alineadas se rechaza en lugar de forzar una tabla falsa. Gratis en su navegador.
- Gratis
- Funciona en su navegador
- Sin registro
- Sus datos no salen de su equipo
Ejecutar — gratis
Es el paso determinista entre extraer el texto de un PDF y usar de verdad los números que contiene, sin OCR ni conjeturas de IA.
Del texto PDF en bruto a una tabla estructurada
Cuando un extractor de texto procesa una página PDF, las tablas vuelven como líneas de texto planas. Una persona aún distingue las columnas porque los valores se alinean —separados por tabulaciones o por huecos de dos o más espacios—, pero un programa no. Esta capacidad cierra esa brecha.
Usted envía las líneas en bruto de la página y el sistema encuentra las columnas alineadas: cada línea se divide por el separador detectado, el número de columnas que se repite entre líneas se toma como la forma de la tabla y cada línea se corta en celdas. La primera fila se convierte en la cabecera por defecto, de modo que la salida es un array columns con nombres y un array rows con los datos, listo para convertir en objetos o cargar en un dataframe.
Todo es determinista —el mismo texto produce siempre la misma tabla—, lo que la hace segura para una canalización automatizada donde un OCR o un modelo de visión introduciría variación silenciosa.
Cómo funciona realmente el análisis
Primero se descartan las líneas en blanco y cada línea restante se divide en celdas. En modo auto el analizador usa tabulaciones cuando alguna línea contiene una, y si no, recurre a secuencias de dos o más espacios; también puede forzar cualquiera de las dos estrategias con el parámetro delimiter. Solo las líneas que producen al menos dos celdas son candidatas a la tabla.
Entre ellas, el analizador busca el número de columnas que se repite: la moda de la distribución. Una tabla real son líneas que coinciden en cuántas columnas tienen, así que las líneas con un recuento distinto —un párrafo partido, un pie suelto— se apartan. Si ningún recuento se repite al menos dos veces, o hay menos de dos líneas candidatas, la entrada se rechaza: no hay tabla que encontrar.
Desactívelo para datos sin cabecera y los nombres sintéticos se aplican a todas las filas.
Dónde encaja y qué no es
Tenga claro qué no es. No lee el archivo PDF en sí —trabaja sobre texto que usted ya ha extraído. No procesa páginas escaneadas, porque no tienen capa de texto; para imágenes de tablas necesita una capacidad basada en OCR.
Y espera columnas alineadas, no prosa: el texto corrido se rechaza en lugar de deformarse en una tabla falsa.
Qué puede hacer con ella
Automatizar una canalización de ingesta de informes
Ejecute el analizador tras su extractor de texto en cada página y cargue solo las que contienen tablas: el resto se rechazan limpiamente y no se facturan.
Preguntas frecuentes
¿Lee el archivo PDF directamente?
No. Analiza la capa de texto en bruto de una página que usted proporciona. Extraiga primero el texto con un extractor de texto PDF y luego envíe las líneas aquí.
¿Qué separadores de columnas admite?
Tabulaciones o secuencias de dos o más espacios. El modo automático detecta cuál usa la página; también puede forzar tabulaciones o espacios con el parámetro delimiter.
¿Qué ocurre cuando el texto no tiene tabla?
Las llamadas no válidas se rechazan antes de la facturación, así que no cuestan nada.
¿Funciona con PDF escaneados?
No. Un escaneo es una imagen y no tiene capa de texto que analizar. Use un extractor de tablas OCR para documentos escaneados; esta capacidad es para PDF digitales con texto seleccionable.
¿Se almacena mi documento?
No. El texto se procesa en memoria y se descarta; solo se devuelve la tabla analizada.
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/extract-tables \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"Item\tQty\tUnit price\nWidget\t12\t9.99\nGadget\t3\t24.50"}'const res = await fetch("https://api.kit.forhosting.com/pdf/extract-tables", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "Item\tQty\tUnit price\nWidget\t12\t9.99\nGadget\t3\t24.50"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/pdf/extract-tables",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "Item\tQty\tUnit price\nWidget\t12\t9.99\nGadget\t3\t24.50"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/pdf/extract-tables", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"Item\\tQty\\tUnit price\\nWidget\\t12\\t9.99\\nGadget\\t3\\t24.50"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"Item\tQty\tUnit price\nWidget\t12\t9.99\nGadget\t3\t24.50"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/pdf/extract-tables", 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
{
"text": "Item\tQty\tUnit price\nWidget\t12\t9.99\nGadget\t3\t24.50"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "pdf.extract_tables",
"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 | 1 |
max_lines | 5000 |
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
La API para extraer tablas de texto PDF toma la capa de texto en bruto de una página PDF —las líneas que devuelve un extractor de texto, donde las columnas están alineadas con tabulaciones o con secuencias de espacios— y la convierte en una tabla estructurada y limpia: nombres de columna, filas de datos y recuentos, en JSON listo para una hoja de cálculo, una importación a base de datos o un script.
Del texto PDF en bruto a una tabla estructurada
Si la página no contiene columnas alineadas, la llamada falla con un error invalid_input claro en lugar de inventar una tabla, y las llamadas fallidas no se facturan.
Cómo funciona realmente el análisis
Con has_header activado, la primera fila de la tabla nombra las columnas; las celdas de cabecera vacías o duplicadas se sustituyen por col_1, col_2 y así sucesivamente, de modo que cada nombre de columna de salida sea utilizable.
Dónde encaja y qué no es
Úsela como segunda etapa de una canalización de datos PDF: extraiga la capa de texto con un extractor, llame a este endpoint en cada página que contenga una tabla y cargue las filas resultantes donde correspondan. Como el análisis es procesamiento de texto puro, se ejecuta en el borde en milisegundos, cuesta $0.002 por llamada, y el mismo código se ejecuta gratis en su navegador en esta página, de modo que puede probar el texto de una página pegándolo antes de automatizar nada. También sirve para trabajos puntuales: pegue el texto de la página de un informe, obtenga JSON y conviértalo a CSV en un paso más.
Casos de integración
Recuperar una lista de precios de una página PDF
Extraiga el texto de la página, envíelo y obtenga las columnas de artículo, cantidad y precio como filas JSON listas para importar a una hoja de cálculo.
Convertir un volcado de datos sin cabecera
Desactive la detección de cabecera con has_header=false y obtenga nombres estables col_1..col_n para cada fila de un listado alineado con espacios.
Preguntas técnicas
¿Cuánto cuesta?
$0.002 por llamada. El mismo analizador también se ejecuta gratis en su navegador en esta página, así que solo paga cuando lo automatiza mediante la API.