O que esta ferramenta faz
Este conversor renderiza cada página de um PDF como imagem PNG ou JPEG, renderizada no teu navegador à resolução que escolheres. Larga um PDF e obténs uma grelha de miniaturas; escolhe um formato e uma escala, depois descarrega todas as páginas de uma vez ou guarda individuais. O PDF é parseado pelo pdf.js dentro do teu separador, desenhado em canvases off-screen, e só esses canvases passam por uma caixa de download. Não há upload.
Quando usar
- Publicar uma página de PDF num fórum ou plataforma de chat que não aceita anexos PDF inline.
- Gerar miniaturas para um site de portefólio sem montar um renderizador no servidor.
- Tirar figuras de um artigo para colar em slides ou noutro documento.
- Criar uma pré-visualização amigável para email de um PDF para destinatários em ligações lentas.
- Produzir input para um pipeline de OCR que queira imagens raster, não PDF vetorial.
Como funciona
O pdf.js carrega o documento e expõe um método getPage(n) por página. Para cada página pedimos um viewport à escala escolhida (1×, 1,5×, 2×, 2,5× ou 3×) e desenhamos num <canvas> novo cuja largura e altura correspondem ao viewport em pixéis. O canvas é depois codificado com canvas.toBlob() (image/png ou image/jpeg com qualidade 0,92 para JPEG) e mostrado como miniatura ou guardado como download.
Mudar o formato é barato porque o canvas já está renderizado — basta recodificar os mesmos pixéis em PNG ou JPEG e atualizar as miniaturas. Mudar a escala é mais caro: uma escala diferente precisa de uma resolução de canvas diferente, por isso a ferramenta volta a correr a renderização do pdf.js no novo viewport. O limite rígido de 100 páginas é uma válvula de segurança para a thread principal do navegador; para além disso, o tempo de renderização e o uso de memória crescem desconfortavelmente para um separador.
O worker do pdf.js é carregado como recurso same-origin (o Vite emite-o no build), por isso não há CDN de terceiros envolvido. Depois de carregar, não há mais tráfego de rede — cada renderização de página e cada codificação de imagem é local.
Notas
PNG ou JPEG? PNG é sem perdas, maior e ótimo para páginas com texto ou gráficos nítidos. JPEG é mais pequeno e bem adequado a páginas com muita imagem (digitalizações, fotografias, mapas), mas pode introduzir artefactos de compressão visíveis nos limites do texto. O defeito é PNG; muda para JPEG quando o tamanho do ficheiro importa.
Porque é que a escala 3× se vê igual no meu ecrã? A densidade de pixéis do teu monitor limita o que consegues ver na pré-visualização, mas o ficheiro de saída é genuinamente 3× a resolução. A miniatura na grelha é reduzida pelo navegador; a imagem que descarregas tem o tamanho completo.
PDF cifrado funciona? PDFs com open-password padrão tipicamente renderizam pelo pdf.js. PDFs com cifra de conteúdo ou DRM podem falhar; o painel mostra um erro de carregamento e nada é renderizado.
Posso renderizar só uma página específica? A grelha mostra todas as páginas; clica no pequeno ícone de download numa miniatura única para guardar só essa página. Não há toggle separado de "renderizar só a página X" — à escala 1×, renderizar um PDF de 50 páginas é suficientemente rápido para o custo não ser significativo.
Ferramentas relacionadas
- Divisor de PDF — extrai as páginas como PDF mais pequeno primeiro
- Compressor de imagens — encolhe o PNG/JPEG resultante
- Conversor de imagens — converte PNG/JPEG para WebP depois de renderizar