Extrair tabelas de PDF
Uma página cujos valores se alinham por tabulações, como Cable, 25 e 1,20, vira uma tabela com três colunas nomeadas e três linhas de dados. Um parágrafo sem colunas alinhadas é recusado em vez de virar uma tabela falsa. Grátis no seu navegador.
- Grátis
- Funciona no seu navegador
- Sem cadastro
- Seus dados não saem do seu aparelho
Executar grátis
É a etapa determinística entre extrair o texto de um PDF e realmente usar os números que ele contém, sem OCR e sem suposições de IA.
Do texto bruto do PDF a uma tabela estruturada
Quando um extrator de texto processa uma página de PDF, as tabelas voltam como linhas de texto simples. Uma pessoa ainda enxerga as colunas porque os valores se alinham — separados por tabulações ou por lacunas de dois ou mais espaços —, mas um programa não. Esta capacidade fecha essa lacuna.
Você envia as linhas brutas da página e o sistema encontra as colunas alinhadas: cada linha é dividida pelo separador detectado, o número de colunas que se repete entre as linhas é tomado como o formato da tabela e cada linha é cortada em células. A primeira linha vira o cabeçalho por padrão, então a saída é um array columns com nomes e um array rows com os dados, prontos para virar objetos ou carregar em um dataframe.
Tudo é determinístico — o mesmo texto sempre gera a mesma tabela —, o que a torna segura para um pipeline automatizado onde um OCR ou modelo de visão introduziria variação silenciosa.
Como a análise realmente funciona
Primeiro, as linhas em branco são descartadas e cada linha restante é dividida em células. No modo auto, o analisador usa tabulações quando alguma linha contém uma e, caso contrário, recorre a sequências de dois ou mais espaços — você também pode forçar qualquer uma das estratégias com o parâmetro delimiter. Somente linhas que produzem pelo menos duas células são candidatas à tabela.
Entre elas, o analisador procura o número de colunas que se repete: a moda da distribuição. Uma tabela de verdade é um conjunto de linhas que concordam sobre quantas colunas têm, então linhas com uma contagem diferente — um parágrafo quebrado, um rodapé solto — são postas de lado. Se nenhuma contagem se repete ao menos duas vezes, ou há menos de duas linhas candidatas, a entrada é rejeitada: não há tabela a encontrar.
Desative para dados sem cabeçalho e os nomes sintéticos se aplicam a todas as linhas.
Onde ela se encaixa e o que não é
Deixe claro o que ela não é. Ela não lê o arquivo PDF em si — trabalha sobre texto que você já extraiu. Não processa páginas digitalizadas, pois elas não têm camada de texto; para imagens de tabelas, você quer uma capacidade baseada em OCR.
E espera colunas alinhadas, não prosa: texto corrido é rejeitado em vez de ser deformado em uma tabela falsa.
Casos de uso
Automatizar um pipeline de ingestão de relatórios
Execute o analisador após o seu extrator de texto em cada página e carregue apenas as que contêm tabelas — as demais são rejeitadas de forma limpa e não são cobradas.
Perguntas frequentes
Ela lê o arquivo PDF diretamente?
Não. Ela analisa a camada de texto bruto de uma página que você fornece. Extraia primeiro o texto com um extrator de texto de PDF e depois envie as linhas aqui.
Quais separadores de coluna são aceitos?
Tabulações ou sequências de dois ou mais espaços. O modo automático detecta qual a página usa; você também pode forçar tabulação ou espaços com o parâmetro delimiter.
O que acontece quando o texto não tem tabela?
Chamadas inválidas são rejeitadas antes da cobrança, então não custam nada.
Funciona com PDFs digitalizados?
Não. Uma digitalização é uma imagem e não tem camada de texto para analisar. Use um extrator de tabelas com OCR para documentos digitalizados; esta capacidade é para PDFs digitais com texto selecionável.
Meu documento fica armazenado?
Não. O texto é processado em memória e descartado; apenas a tabela analisada é devolvida.
Ferramentas relacionadas
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
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)Exemplo de requisição
{
"text": "Item\tQty\tUnit price\nWidget\t12\t9.99\nGadget\t3\t24.50"
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "pdf.extract_tables",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Limites
max_mb | 1 |
max_lines | 5000 |
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |
Notas técnicas
A API de extração de tabelas de texto de PDF pega a camada de texto bruto de uma página de PDF — as linhas que um extrator de texto devolve, com colunas alinhadas por tabulações ou sequências de espaços — e a converte em uma tabela estruturada e limpa: nomes de colunas, linhas de dados e contagens, em JSON pronto para uma planilha, uma importação de banco de dados ou um script.
Do texto bruto do PDF a uma tabela estruturada
Se a página não contém colunas alinhadas, a chamada falha com um erro invalid_input claro em vez de inventar uma tabela, e chamadas com falha não são cobradas.
Como a análise realmente funciona
Com has_header ativado, a primeira linha da tabela nomeia as colunas; células de cabeçalho vazias ou duplicadas são substituídas por col_1, col_2 e assim por diante, de modo que todo nome de coluna de saída seja utilizável.
Onde ela se encaixa e o que não é
Use como segunda etapa de um pipeline de dados de PDF: extraia a camada de texto com um extrator, chame este endpoint em cada página que contenha uma tabela e carregue as linhas resultantes onde for preciso. Como a análise é processamento de texto puro, ela roda na borda em milissegundos, custa US$ 0,002 por chamada, e o mesmo código roda grátis no seu navegador nesta página, então você pode testar o texto de uma página colando-o antes de automatizar qualquer coisa. Também é útil para trabalhos pontuais: cole o texto da página de um relatório, obtenha JSON e converta para CSV em mais um passo.
Casos de integração
Recuperar uma lista de preços de uma página de PDF
Extraia o texto da página, envie-o e receba as colunas de item, quantidade e preço como linhas JSON prontas para importar em uma planilha.
Converter um despejo de dados sem cabeçalho
Desligue a detecção de cabeçalho com has_header=false e obtenha nomes estáveis col_1..col_n para cada linha de uma listagem alinhada por espaços.
Perguntas técnicas
Quanto custa?
US$ 0,002 por chamada. O mesmo analisador também roda grátis no seu navegador nesta página, então você só paga quando automatiza pela API.