Extraia texto de páginas PDF e una tudo na ordem
Dois textos de página, um relatório trimestral e seu anexo, viram um único documento com o separador --- PAGE BREAK --- entre eles, na ordem em que você enviou e sem nada reescrito. Útil depois de um leitor de texto ou de um OCR. Grátis no seu navegador.
- Grátis
- Funciona no seu navegador
- Sem cadastro
- Seus dados não saem do seu aparelho
Executar grátis
Transforme blocos separados de texto de páginas PDF em uma única sequência previsível sem perder os limites entre as páginas. Envie, na ordem correta, o texto já extraído de cada página; a capacidade une os blocos com um marcador claro. Ela não executa OCR, baixa nem analisa um arquivo PDF. Seu papel é concluir pipelines que já produzem um bloco por página e precisam de uma saída estável, pesquisável ou exportável.
Prepare os blocos na ordem correta
Envie um array pages com pelo menos um objeto e coloque o texto extraído de cada página PDF no campo text. A posição no array define a ordem: o primeiro registro é a página um, o segundo é a página dois e assim por diante. A capacidade não reordena, não deduz números de página nem examina o PDF, pois isso poderia alterar silenciosamente uma sequência já estabelecida pelo extrator anterior.
Cada texto pode conter títulos, parágrafos, linhas vazias, caracteres Unicode ou uma string vazia quando uma página real não tem texto extraível. A página vazia é aceita e sua posição continua indicada pelos marcadores vizinhos. Cada item ainda deve ser um objeto com text do tipo string; valores ausentes, números, arrays internos e outros formatos são rejeitados.
Esse contrato estrito evita coerções acidentais. Cada solicitação aceita no máximo 10000 blocos de página.
Entenda o resultado combinado
O campo text traz as strings originais exatamente na ordem enviada. Entre cada par adjacente, o algoritmo insere duas quebras de linha, o marcador --- PAGE BREAK --- e mais duas quebras. Nenhum marcador aparece antes da primeira página ou depois da última.
Além de inserir separadores, o algoritmo não remove espaços, normaliza, reorganiza, interpreta nem reescreve o conteúdo. Espaços iniciais, quebras finais, linhas repetidas, pontuação e alfabetos não latinos permanecem como recebidos. Essa preservação é intencional: a etapa de montagem não deve editar evidências extraídas.
Caso você precise de prosa limpa depois, aplique uma normalização separada e explícita. Para dividir o resultado novamente, use o marcador retornado junto das quebras de linha.
Use em um fluxo de extração de PDF
Use esta capacidade depois que um leitor da camada de texto, um sistema OCR, um analisador de documentos ou um pipeline de upload produzir um bloco para cada página. Ela ajuda quando o próximo sistema exige uma única string, mas revisores, pesquisas ou citações ainda precisam identificar limites. Um processo de indexação pode juntar as páginas e manter os pontos em que o contexto muda.
Um arquivo pode guardar uma representação textual estável ao lado do documento original. Um pipeline de linguagem pode encaminhar o texto completo sem ensinar cada consumidor a percorrer arrays. A mesma entrada sempre produz a mesma saída.
A qualidade depende da extração anterior; colunas embaralhadas, glifos ausentes ou páginas apenas com imagem devem ser corrigidos nessa etapa.
Casos de uso
Preparar texto para pesquisa
Una resultados por página em uma string indexável, mantendo limites explícitos para revisão e destaque.
Montar a saída do OCR
Junte páginas reconhecidas separadamente para entregar um documento ordenado à sumarização ou classificação.
Criar um texto para arquivamento
Armazene uma representação textual determinística ao lado do PDF e preserve as transições de página.
Perguntas frequentes
Esta capacidade lê um arquivo PDF?
Não. Ela recebe blocos já extraídos de páginas individuais e executa apenas a montagem ordenada.
Uma página pode conter uma string vazia?
Sim. Isso representa uma página sem texto extraído e preserva sua posição original entre os limites.
O que separa uma página da seguinte no resultado?
Duas quebras de linha, o separador --- PAGE BREAK --- e mais duas quebras de linha. Nada é acrescentado antes da primeira página nem depois da última, então o texto começa e termina exatamente como você enviou.
Ele limpa espaços ou quebras de linha do meu texto?
Não. Espaços no início, quebras no fim, linhas em branco repetidas, pontuação e escritas não latinas ficam como vieram. Se quiser um texto limpo, aplique depois uma normalização separada e explícita.
Posso separar de novo o texto unido em páginas?
Sim: corte pelo separador junto com as quebras de linha em volta dele. Lembre que o mesmo texto literal pode já existir dentro de alguma página, então vale conferir antes de confiar no corte.
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-text \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"pages":[{"text":"Quarterly report\nRevenue increased by 12%."},{"text":"Appendix\nFigures are unaudited."}]}'const res = await fetch("https://api.kit.forhosting.com/pdf/extract-text", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"pages": [
{
"text": "Quarterly report\nRevenue increased by 12%."
},
{
"text": "Appendix\nFigures are unaudited."
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/pdf/extract-text",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"pages": [
{
"text": "Quarterly report\nRevenue increased by 12%."
},
{
"text": "Appendix\nFigures are unaudited."
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/pdf/extract-text", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"pages":[{"text":"Quarterly report\\nRevenue increased by 12%."},{"text":"Appendix\\nFigures are unaudited."}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"pages":[{"text":"Quarterly report\nRevenue increased by 12%."},{"text":"Appendix\nFigures are unaudited."}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/pdf/extract-text", 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
{
"pages": [
{
"text": "Quarterly report\nRevenue increased by 12%."
},
{
"text": "Appendix\nFigures are unaudited."
}
]
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "pdf.extract_text",
"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 | 25 |
max_pages | 200 |
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
Entenda o resultado combinado
A resposta contém text, pages e page_break_marker. O campo pages informa quantos blocos foram unidos, enquanto page_break_marker permite que sistemas posteriores descubram o delimitador.
Use em um fluxo de extração de PDF
O processamento é determinístico e local ao JSON fornecido: não há rede, escolha aleatória, dependência da hora, OCR ou decodificação de PDF. Solicitações automatizadas custam US$ 0,002.
Perguntas técnicas
Qual marcador é inserido entre as páginas?
Ela insere --- PAGE BREAK --- cercado por duas quebras de linha de cada lado e o retorna em page_break_marker.
O que acontece se eu não enviar páginas?
A solicitação falha com invalid_input porque pelo menos um bloco de página é obrigatório.
Quanto custa uma solicitação?
Solicitações automatizadas usam o preço-base publicado de US$ 0,002; não há cobrança adicional por página.