Extrator inteligente de links e texto de arquivos PDF com referências de hyperlinks.
- ✅ Extração de hyperlinks clicáveis (annotations do PDF)
- ✅ Extração de texto legível (múltiplos métodos)
- ✅ Referências de hyperlinks no texto (contexto inteligente)
- ✅ Detecção de emails
- ✅ Saída em JSON (dados estruturados)
- ✅ Múltiplos métodos de fallback
# macOS
curl -fsSL https://bun.sh/install | bash
# Ubuntu/Debian
curl -fsSL https://bun.sh/install | bash
# Windows
powershell -c "irm bun.sh/install.ps1 | iex"# macOS
brew install poppler
# Ubuntu/Debian
sudo apt-get install poppler-utils
# Windows
scoop install poppler# Clone o repositório
git clone git@github.com:aka-sacci-ccr/pdf-script.git
cd pdf-script
# Instale as dependências
bun install# Extrair links e texto de um PDF
bun run extract arquivo.pdf
# Exemplo
bun run extract documento.pdf# Processar todos os PDFs de uma pasta
bun run batch-extract ./pasta-pdfs/
# Exemplo básico
bun run batch-extract ./confluence/
bun run batch-extract .
# Com pasta de saída personalizada
bun run batch-extract ./confluence/ --output ./resultados/
# Preservando estrutura de pastas
bun run batch-extract ./confluence/ --output ./saida/ --preserve-structure--output <pasta>: Define onde salvar os arquivos JSON--preserve-structure: Mantém a mesma estrutura de pastas da origem
O script gera um arquivo JSON com:
{
"text": "Texto completo extraído do PDF...",
"hyperlinks": ["https://exemplo.com", "..."],
"textUrls": ["URLs encontradas no texto..."],
"urls": ["Todos os links únicos..."],
"emails": ["email@exemplo.com"],
"hyperlinkReferences": [
{
"url": "https://exemplo.com",
"text": "Texto relacionado ao link",
"context": "Contexto onde o link aparece",
"position": 1234,
"line": 15,
"type": "related_text"
}
],
"pages": 3,
"metadata": {
"extractor": "pdftotext"
}
}- pdftotext (mais confiável - requer poppler-utils)
- pdf-parse (biblioteca JavaScript)
- pdf-lib (objetos de página)
- Extração raw (regex e streams)
// Padrões suportados:
[Texto](@URL) // [Formulário](@https://exemplo.com)
[Texto](URL) // [Formulário](https://exemplo.com)
"Texto" (URL) // "Formulário" (https://exemplo.com)
Texto (URL) // Formulário (https://exemplo.com)
// Contexto inteligente:
...texto antes do link... https://exemplo.com ...texto depois...O script batchConvert.js processa múltiplos PDFs de uma pasta:
- ✅ Processamento recursivo (inclui subpastas)
- ✅ Resumo detalhado com estatísticas
- ✅ Tratamento de erros individual por arquivo
- ✅ Tempo de processamento por arquivo
- ✅ Arquivo JSON para cada PDF processado
- ✅ Pasta de saída personalizada (
--output) - ✅ Preservação de estrutura (
--preserve-structure)
🔄 Iniciando conversão em lote da pasta: ./pdfs/
📁 Encontrados 3 arquivos PDF:
1. documento1.pdf
2. documento2.pdf
3. documento3.pdf
📄 [1/3] Processando: documento1.pdf
✅ Concluído em 1250ms
📊 Páginas: 5
🔗 Hyperlinks: 8
📧 Emails: 2
📍 Referências: 3
💾 Salvo em: documento1_data_2025-01-18T14-30-15-123Z.json
============================================================
📊 RESUMO DA CONVERSÃO EM LOTE
============================================================
✅ Arquivos processados com sucesso: 3
❌ Arquivos com erro: 0
📁 Total de arquivos: 3
🔗 Total de hyperlinks encontrados: 24
📧 Total de emails encontrados: 6
📍 Total de referências encontradas: 9
🎉 Conversão em lote concluída!# Executar arquivo único
bun main.js arquivo.pdf
# Executar conversão em lote
bun batchConvert.js ./pasta/
# Verificar dependências
which pdftotext
which bunMIT License