Achate campos de formulário PDF em conteúdo estático
Ada (Countess) Lovelace digitado num campo da página 1 e uma caixa marcada na página 2 viram conteúdo fixo, e o relatório confirma que os dois foram achatados. O formulário deixa de ter campos ativos que alguém possa editar. 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 um formulário PDF interativo já preenchido em uma representação estável, na qual os valores digitados fazem parte do conteúdo da página. Esta capacidade recebe o conteúdo das páginas e as definições dos campos, valida cada valor e posição, cria operações de aparência estáticas e determinísticas, remove a coleção interativa e informa exatamente quais campos foram achatados. Ela foi projetada para automações previsíveis depois que um PDF é analisado, preenchido e aprovado, com um erro claro quando o formulário fornecido não contém campos.
O que muda ao achatar um formulário preenchido
Um PDF preenchido pode parecer concluído e ainda conter controles editáveis. Caixas de texto, caixas de seleção, escolhas, botões de opção e valores visíveis de assinatura podem continuar separados das instruções normais de desenho de cada página. Essa diferença importa quando o documento segue para entrega, impressão ou arquivo: um visualizador pode expor ou alterar o controle, e leitores diferentes podem renderizar sua aparência de maneiras distintas.
Esta capacidade usa os valores fornecidos e grava uma operação de aparência estática no conteúdo da página correspondente. A operação fica recortada no retângulo informado, usa formatação numérica estável e protege caracteres com significado especial em strings PDF. Depois do processamento, a coleção de campos interativos retornada fica vazia.
Assim, os valores visíveis acompanham o modelo de conteúdo da página, sem depender de controles ativos. A saída também traz um relatório campo a campo na ordem recebida, permitindo que seu fluxo registre exatamente o que mudou.
Como preparar corretamente páginas e valores
Forneça pelo menos uma página, identificada por um número positivo e exclusivo, com seu fluxo de conteúdo estático existente representado como texto. Em seguida, envie cada campo preenchido com nome exclusivo, número da página, tipo, valor em string e coordenadas do retângulo em pontos PDF. São aceitos campos de texto, caixas de seleção, botões de opção, escolhas e assinaturas.
Os valores são strings porque o achatamento trabalha com o valor exibido; por exemplo, uma caixa marcada pode usar “Yes”, enquanto uma escolha usa o rótulo selecionado. Cada campo deve indicar uma página existente, e largura e altura precisam ser maiores que zero. Coordenadas e dimensões devem ser números finitos.
A validação é rigorosa de propósito. Nomes ou páginas duplicados, tipos desconhecidos, geometria inválida, páginas ausentes ou valores que não sejam strings causam um erro claro, em vez de um resultado parcialmente achatado. Principalmente, uma lista vazia de campos é rejeitada explicitamente, evitando que uma operação sem efeito pareça bem-sucedida.
Como usar o relatório em um fluxo confiável
Coloque esta transformação depois do preenchimento e da aprovação humana ou programática, mas antes da entrega final ou do empacotamento para arquivo. O resultado contém páginas ordenadas por número, o conteúdo original seguido das operações de aparência geradas, uma coleção de campos vazia, a contagem achatada e o relatório detalhado. Cada item do relatório inclui nome, página, tipo e valor exibido originais.
Compare a contagem com a quantidade esperada pelo seu fluxo ou armazene o relatório junto ao registro de auditoria para facilitar investigações posteriores. Essa característica ajuda em testes de referência, hashes de conteúdo, novas tentativas e builds reproduzíveis. A capacidade modela a etapa de achatamento, não a leitura de bytes PDF; um sistema binário deve analisar antes as páginas e os campos AcroForm e depois serializar o modelo estático retornado.
Casos de uso
Finalizar uma solicitação aprovada
Incorpore os valores do solicitante ao conteúdo das páginas após a revisão e guarde o relatório junto ao registro.
Estabilizar formulários antes da impressão
Remova a dependência de controles interativos para representar os valores com operações gráficas determinísticas.
Perguntas frequentes
Quanto custa esta capacidade?
A implementação no navegador usa a mesma transformação determinística.
O que acontece se o formulário não tiver campos?
A solicitação falha com um erro de entrada inválida informando que o formulário PDF não possui campos. Formulários vazios nunca são declarados achatados.
Quais tipos de campo são aceitos?
São aceitos texto, caixa de seleção, botão de opção, escolha e assinatura. A string fornecida é tratada como o valor exibido.
A capacidade analisa um arquivo PDF binário?
Não. Ela transforma deterministicamente o conteúdo e os valores já analisados. Um fluxo binário deve analisar antes e serializar depois.
Parênteses ou outros sinais em um nome estragam a página?
Não. Os caracteres que têm significado especial dentro de um PDF são protegidos na escrita, então um nome como Ada (Countess) Lovelace fica exatamente como foi preenchido. Além disso, cada valor é recortado ao retângulo do seu campo e não invade o resto da página.
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/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)Exemplo de requisição
{
"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
}
]
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "pdf.flatten_form",
"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
Como usar o relatório em um fluxo confiável
Como o algoritmo não acessa rede, não faz escolhas aleatórias, não lê o relógio e não usa estado mutável compartilhado, a mesma entrada sempre produz o mesmo JSON.
Casos de integração
Verificar um fluxo documental automático
Compare flattened_count e flattened_fields com o esquema esperado antes de serializar, entregar ou arquivar.
Perguntas técnicas
O resultado identifica os campos achatados?
Sim. flattened_fields informa nome, página, tipo e valor de cada campo, e flattened_count apresenta o total.