ForHosting KIT · PDF e documentos

Extrair links de PDF

De sete anotações de um PDF saem os quatro links da web de verdade, cada um com o número da página; comentários, destaques e saltos internos ficam de fora. Um link repetido em três páginas aparece três vezes. Grátis no seu navegador.

  • Grátis
  • Funciona no seu navegador
  • Sem cadastro
  • Seus dados não saem do seu aparelho
Use pelo WebAPIE-mailTelegramApp em breve

Roda direto no seu navegador. Grátis, sem cadastro — seus dados não são enviados para lugar nenhum.

O extrator de links de PDF lê a lista de anotações por página de um PDF — exatamente o que uma biblioteca leitora como o pdf.js devolve em getAnnotations — e retorna cada hiperlink encontrado, com seu número de página e sua URL de destino. É o passo que faltava entre «já tenho as anotações» e «sei para onde este documento aponta»: uma passada determinística, sem renderização, sem OCR e sem suposições. Links puramente internos e anotações que não são links são descartados, de modo que o que você recebe é uma lista limpa e ordenada das referências externas que o documento faz, pronta para uma auditoria, uma lista semente para um rastreador ou uma verificação de conformidade.

Por que anotações, e não texto bruto

Procurar links percorrendo o texto extraído não é confiável: uma URL visível no texto pode não ser clicável, e um link clicável pode mostrar um texto âncora que não se parece em nada com o destino. A fonte autorizada para extrair links de PDF é a camada de anotações. Leitores de PDF armazenam elementos interativos como anotações associadas a uma página, e os hiperlinks vivem ali como entradas do subtipo Link com uma URI.

Esta capacidade recebe essa lista como entrada — um registro por anotação com número de página, subtipo e URI opcional — e a filtra até restarem apenas os hiperlinks de saída reais. Como o número da página viaja com cada anotação, cada resultado diz exatamente em que ponto do documento o link está, o que torna a saída útil para revisões e auditorias, e não uma mera lista de URLs.

O que o extrator mantém e o que descarta

O filtro é deliberadamente estrito. Só são consideradas as anotações cujo subtipo é Link; comentários, destaques, widgets de formulário e qualquer outro tipo de anotação são ignorados. Entre as anotações Link, só sobrevivem as que carregam uma URI não vazia: uma anotação de link sem URI costuma ser um salto interno para outra página, ou seja, navegação dentro do documento e não um hiperlink para um destino externo, por isso fica de fora.

As URIs têm os espaços ao redor removidos, mas fora isso são devolvidas literalmente: sem reescrita, sem resolução, sem deduplicação. Se a mesma URL aparece em três páginas, você recebe três entradas, porque o fato de aparecer três vezes é informação. A saída é ordenada exatamente como as anotações chegam, o que na prática significa a ordem do documento.

A mesma URL pode aparecer legitimamente várias vezes em um documento longo — no rodapé repetido, numa bibliografia e numa página de contato — e agrupar essas ocorrências apagaria a diferença entre uma citação pontual e uma referência sistemática, então o extrator mantém todas e deixa que quem chama decida o que agregar depois.

Onde ela se encaixa num pipeline

O fluxo típico é: abrir o PDF com uma biblioteca leitora, coletar as anotações página a página, achatá-las na lista de registros que esta capacidade espera e enviá-las. Você recebe de volta uma contagem e um array de pares {page, url}. Equipes a usam para inventariar as referências externas de contratos e relatórios antes da publicação, para montar a lista semente de uma verificação de links, ou para confirmar que um documento anonimizado não aponta mais para onde não deveria.

Uma lista de anotações vazia é tratada como erro, e não como resultado vazio, porque uma lista vazia quase sempre significa que a etapa de extração anterior falhou ou que o arquivo nunca teve camada de anotações — e devolver zero links em silêncio esconderia isso.

Audite as referências externas antes de publicar

Inventarie cada hiperlink que um relatório ou contrato faz, com números de página, para que os revisores confirmem que cada destino é intencional e correto.

Alimente uma verificação de links quebrados

Passe as URLs extraídas a um verificador de links para detectar destinos mortos num documento que seus clientes estão prestes a baixar.

Verifique um documento anonimizado

Confirme que a versão publicada de um PDF não aponta mais para URLs internas de homologação ou de parceiros que deveriam ter sido removidas.

Quanto custa?

Também é grátis executar no seu navegador nesta página.

Que entrada ela espera?

Uma lista de anotações achatada: um registro por anotação com número de página começando em 1, seu subtipo e, para links, sua URI. Bibliotecas leitoras como o pdf.js produzem isso a partir de getAnnotations com um pequeno passo de mapeamento.

Por que recebo um erro em vez de uma lista vazia?

Um array de anotações vazio significa que a extração anterior falhou ou que o PDF não tem camada de anotações.

Os saltos internos de página são incluídos?

Não. Anotações de link sem URI são destinos internos dentro do documento, não hiperlinks de saída, e são ignoradas.

URLs duplicadas são deduplicadas?

Não. Se a mesma URL está linkada em três páginas, você recebe três entradas, porque cada ocorrência carrega seu próprio número de página e essa repetição é, ela mesma, informação útil.

Ela baixa ou valida as URLs?

Não. A extração é puramente local e determinística; nenhuma requisição de rede é feita contra os destinos.

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.

POSThttps://api.kit.forhosting.com/pdf/extract-links

Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.

curl -X POST https://api.kit.forhosting.com/pdf/extract-links \
  -H "Authorization: Bearer $KIT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"annotations":[{"page":1,"subtype":"Link","uri":"https://example.com/docs"},{"page":1,"subtype":"Text","uri":null},{"page":3,"subtype":"Link","uri":"https://example.com/contact"}]}'
{
  "annotations": [
    {
      "page": 1,
      "subtype": "Link",
      "uri": "https://example.com/docs"
    },
    {
      "page": 1,
      "subtype": "Text",
      "uri": null
    },
    {
      "page": 3,
      "subtype": "Link",
      "uri": "https://example.com/contact"
    }
  ]
}
{
  "task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
  "type": "pdf.extract_links",
  "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.

por chamadaUS$ 0,002

Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.

max_mb1
max_annotations50000
HTTPCódigoO que significa
401unauthorizedToken ausente ou inválido. Confira o header Authorization.
402insufficient_balanceSaldo insuficiente para esta tarefa. Faça uma recarga e tente de novo.
404unknown_typeEsse tipo de tarefa não existe. Confira o campo type no catálogo.
429rate_limitedMuitas requisições em pouco tempo. Espere um instante e tente de novo.

Por que anotações, e não texto bruto

O contrato ainda valida cada registro no percurso: um número de página ausente, uma página não inteira ou um subtipo faltante interrompe a chamada com um erro invalid_input claro, em vez de produzir em silêncio uma resposta parcial que você seria tentado a confiar.

Onde ela se encaixa num pipeline

O mesmo código roda grátis no seu navegador nesta página, então você pode validar um payload colando-o e só pagar quando automatizar a chamada.

Ver a documentação completa do KIT →