O que esta ferramenta faz
Este extrator puxa o conteúdo textual de um PDF. Larga um ficheiro, opcionalmente ativa "preservar quebras de linha", e obténs o texto em bruto à direita — com cada página apresentada por um pequeno marcador (--- Página N ---). O texto pode ser copiado para a área de transferência ou descarregado como ficheiro .txt em UTF-8. O parsing acontece inteiramente no teu navegador via pdf.js; o PDF nunca é enviado.
Quando usar
- Pesquisar uma frase num relatório, contrato ou tese longa sem pagar uma suite de desktop.
- Alimentar o corpo de um PDF a um summarizador, tradutor ou prompt de LLM que quer texto simples.
- Extrair o resumo ou as referências de um artigo académico para colar num gestor de citações.
- Exportar transcrições de chat ou email que chegaram como PDFs para um formato que os teus scripts conseguem grep.
- Verificar a camada de OCR num documento digitalizado — a ausência de texto reconhecível aqui significa que o PDF é só imagem e precisa de OCR primeiro.
Como funciona
O pdf.js expõe um método getTextContent() em cada página que devolve as runs de texto da página pela ordem em que aparecem no content stream do documento, juntamente com a matriz de transformação de cada run (um array de seis elementos cujo índice 5 é a coordenada y). Com o toggle desligado, os items são unidos com espaços simples — rápido e consistente, mas as newlines que o PDF original expressava visualmente perdem-se. Com Preservar quebras de linha ativado, a ferramenta percorre os items e insere um \n sempre que a coordenada y salta mais de ~5 pixéis — uma heurística que recupera fronteiras de parágrafo e linha surpreendentemente bem em PDFs baseados em texto.
As páginas são separadas com um marcador literal --- Página N --- para que ao colar o resultado numa caixa de pesquisa ou ao fazer grep, ainda consigas encontrar a página que queres. A codificação é UTF-8, o que significa que diacríticos latinos, cirílico, CJK e árabe fazem round-trip sem mojibake.
O worker do pdf.js é empacotado como recurso same-origin emitido pelo Vite em build. Não há chamada a CDN de terceiros, sem telemetria e sem cópia do teu texto retida depois de o separador fechar.
Notas
Porque é que o resultado está vazio para alguns PDFs? Os PDFs vêm em duas variedades: os que têm uma camada de texto real (do tipo que exportadores como Word, LaTeX e Chrome produzem) e os que são imagens de páginas (digitalizações, faxes, alguns relatórios antigos). O pdf.js só consegue extrair do primeiro tipo. Se o painel não devolve nada, o teu PDF é só imagem e precisas de OCR — experimenta uma ferramenta como o Tesseract.js ou um pipeline de OCR de desktop antes de extrair de novo.
Porque é que as colunas às vezes se intercalam? Os PDFs não armazenam parágrafos; armazenam runs de glifos em coordenadas específicas. Layouts de duas colunas podem parecer bem no ecrã mas dão-nos runs intercalados porque os items aparecem em ordem de stream, não em ordem visual. A heurística de coordenada y ajuda em documentos de coluna única; para PDFs multi-coluna complicados, podes precisar de limpar a saída manualmente.
As tabelas são preservadas? As células passam como texto mas a estrutura de colunas não — não há conceito de "esta célula alinha com aquela célula" no stream subjacente. Para dados tabulares, procura uma exportação CSV da origem se possível.
O resultado é o mesmo que "Ver → Selecionar tudo → Copiar" num leitor de PDF? Próximo, mas não idêntico. O copy ao nível do leitor usa a stack de tratamento de texto do SO, que por vezes adiciona espaços e quebras de forma diferente. Esta ferramenta mantém-se próxima do stream de items em bruto do pdf.js, com uma heurística opcional de newline por cima.
Ferramentas relacionadas
- PDF para imagens — renderiza para imagens primeiro se precisas de OCR
- Comparador — compara texto extraído de dois PDFs
- Pré-visualização Markdown — renderiza o extrato como Markdown depois de uma limpeza ligeira