Skip to content

F4NT0/pdfextractor

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PDF Extractor — LFB Reciclagem Eletrônica

Go Version Bubbletea Lipgloss PDF Library JSON Platform

TUI em Go para extrair dados de recibos de pesagem eletrônica da LFB Reciclagem Eletrônica e gerar JSONs estruturados — sem dependências externas além do runtime Go.


Funcionalidades

  • Seletor de arquivos customizado — navega o sistema de arquivos inteiramente dentro do terminal
  • Busca integrada/ filtra entradas do diretório atual em tempo real; Ctrl+G pré-preenche o caminho atual para navegar diretamente para qualquer caminho absoluto ou relativo
  • Seleção múltipla de PDFs — selecione quantos arquivos quiser antes de confirmar
  • Escolha do diretório de saída via modal TUI separado
  • Extração 100% assíncrona com status individual por arquivo em tempo real:
    • Laranja — extração em andamento (spinner animado)
    • 🟢 Verde — concluído com sucesso
    • 🔴 Vermelho — falha (navegar até o item mostra a mensagem de erro)
  • JSON nomeado igual ao PDF original (ex.: recibo-28-04.pdfrecibo-28-04.json)
  • Visualizador dual-panel com syntax highlighting colorido, scroll e localização do arquivo no topo
  • Abrir diretório no Explorer / Finder / xdg-open (Ctrl+O)
  • Abrir arquivo diretamente no Neovim (Ctrl+N)

Formato de saída

O JSON gerado é plano (sem aninhamento), com a data do recibo e cada material como chave direta:

{
  "data": "28-04-2026",
  "Placa Notebook B": 0.406,
  "Placa Notebook C": 0.288,
  "Placa Mãe C": 1.002,
  "HD Completo": 0.098
}

Fluxo de uso

Tela inicial
    │  Enter / O
    ▼
Seletor de PDFs ──── / busca por nome ──── Ctrl+G ir para caminho
    │  Ctrl+S (confirmar seleção)
    ▼
Seletor de diretório de saída
    │  Espaço / Ctrl+S
    ▼
Modal de extração assíncrona (status em tempo real)
    │  Enter / Espaço (após concluir)
    ▼
Visualizador de JSONs (painel esquerdo: lista | painel direito: conteúdo)

Atalhos de teclado

Global

Atalho Ação
Ctrl+C Sair
Q Sair (somente na tela do visualizador)

Seletor de arquivos (PDFs e diretório de saída)

Atalho Ação
/ K Mover cursor para cima
/ J Mover cursor para baixo
Enter Abrir pasta selecionada
Espaço Selecionar / desselecionar PDF (modo PDF)
← / Backspace Subir para pasta pai (ou limpar filtro de busca)
/ Ativar busca — filtra nomes no diretório atual
Ctrl+G Ir para caminho — pré-preenche o caminho atual
Ctrl+S Confirmar seleção / escolher pasta atual
Esc Cancelar / fechar modal

Modo de busca (após pressionar / ou Ctrl+G)

Atalho Ação
digitar Filtra entradas do diretório atual que contenham o texto
Enter Se o texto for um caminho válido, navega até ele; senão aplica filtro
Backspace Apagar último caractere
Esc Cancelar busca e restaurar lista completa

Dica: Com Ctrl+G, o campo já vem preenchido com o diretório atual seguido de \ (Windows) ou / (Unix). Basta continuar digitando o caminho destino e pressionar Enter.

Modal de extração

Atalho Ação
/ K Navegar entre arquivos para ver erros
/ J Navegar entre arquivos para ver erros
Enter / Espaço Fechar modal após conclusão

Visualizador de JSONs

Atalho Ação
Tab Alternar painel ativo (lista ↔ viewer)
/ K Navegar lista de JSONs / scroll viewer
/ J Navegar lista de JSONs / scroll viewer
Ctrl+O Abrir pasta do arquivo no Explorer
Ctrl+N Abrir JSON no Neovim
Q Sair

Instalação e uso

Pré-requisitos

  • Go 1.22+
  • PDFs com texto seleccionável (não podem ser imagens escaneadas)
  • Neovim (opcional, para Ctrl+N)

Executar direto

go run ./cmd/pdfextractor

Compilar

# Windows
go build -o pdfextractor.exe ./cmd/pdfextractor
.\pdfextractor.exe

# Linux / macOS
go build -o pdfextractor ./cmd/pdfextractor
./pdfextractor

Estrutura do projeto

pdf-extractor/
├── cmd/
│   └── pdfextractor/
│       └── main.go               # Entrypoint — inicia o programa bubbletea
├── internal/
│   ├── extractor/
│   │   └── extractor.go          # Lógica de extração PDF → JSON
│   │                             #   • abre PDF com ledongthuc/pdf
│   │                             #   • regex para data (DD/MM/YYYY) e materiais
│   │                             #   • serializa JSON plano ordenado
│   └── tui/
│       ├── app.go                # Modelo raiz — roteamento entre telas
│       ├── messages.go           # Tipos de mensagens bubbletea (tea.Msg)
│       ├── filepicker.go         # Seletor de arquivos com busca integrada
│       ├── extraction.go         # Modal de progresso assíncrono com spinner
│       ├── viewer.go             # Visualizador dual-panel com syntax highlight
│       └── styles/
│           └── styles.go         # Paleta de cores e estilos lipgloss
├── go.mod
├── go.sum
└── README.md

Dependências

Pacote Versão Uso
github.com/charmbracelet/bubbletea v1.2.4 Framework TUI (Elm Architecture)
github.com/charmbracelet/lipgloss v1.0.0 Estilos e layout no terminal
github.com/charmbracelet/bubbles v0.20.0 Componente viewport (scroll)
github.com/ledongthuc/pdf latest Extração de texto de PDFs (puro Go)

Observações técnicas

  • A extração usa ledongthuc/pdf (puro Go, sem CGO, sem binários externos).
  • PDFs baseados em imagem (escaneados sem OCR) não terão texto seleccionável e retornarão erro com mensagem explicativa.
  • O campo data é lido do padrão DD/MM/YYYY presente no cabeçalho do recibo LFB e convertido para DD-MM-YYYY no JSON.
  • O JSON de saída recebe exatamente o mesmo nome-base do PDF original, apenas com extensão .json.

About

PDF information extractor - Created for LFB Reciclagem de Material Eletrônicos

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages