Pular para o conteúdo
Compress PDF
Português

Um motor de compressão que roda na sua aba.

Sem filas de workers, sem endpoints de upload, sem cópia de "processamento em nossos servidores". Aqui está exatamente o que acontece com um PDF entre o soltar e o download.

Experimente no seu PDF

Passo 1

Ler e entender o arquivo

O arquivo é lido com a API File.arrayBuffer() do navegador. Nada é postado em lugar nenhum; os bytes vivem na memória da aba.

PDF.js abre o documento e conta as páginas. Algumas páginas espalhadas pelo arquivo são amostradas quanto à densidade de texto. Se uma página amostrada contém quase nenhum caractere, o documento provavelmente é uma digitalização. Se tem bastante, é baseado em texto. Essa classificação determina se a recompressão de imagens ou a rasterização é tentada primeiro.

A análise também detecta proteção por senha. Arquivos criptografados param aqui com uma mensagem clara em vez de produzir uma saída danificada.

Passo 2

Três passagens escalonadas

Cada passagem é uma reconstrução completa. O motor mede o resultado antes de decidir se a próxima passagem, mais destrutiva, é necessária.

Primeira passagem — limpeza estrutural

pdf-lib carrega o documento e o reescreve com fluxos de objetos habilitados. Miniaturas de página, objetos órfãos e metadados de identificação são removidos. Fontes, imagens e conteúdo da página não são tocados, então esta passagem é efetivamente sem perdas.

Sem perdas

Segunda passagem — recompressão de imagens

O motor percorre o dicionário de recursos de cada página, incluindo imagens aninhadas em XObjects de formulário, e encontra fluxos de imagem JPEG. Cada um é decodificado com createImageBitmap, desenhado em um canvas em tamanho reduzido e recodificado em qualidade mais baixa.

O novo fluxo substitui o objeto antigo no lugar, então layout da página, texto, links e arte vetorial permanecem inalterados. Imagens com máscaras suaves, espaços de cor CMYK, compressão JPX ou JBIG2 são ignoradas em vez de arriscar uma renderização quebrada.

Texto preservado

Terceira passagem — rasterização

Quando o alvo ainda está fora de alcance — ou quando a origem é uma digitalização — o PDF.js renderiza cada página em um canvas fora da tela a 36–160 DPI. Os JPEGs são montados em um documento novo com pdf-lib. Isso achata o texto em pixels, então roda por último e o painel de resultados avisa.

Último recurso

Passo 3

Buscar o melhor resultado que caiba

As configurações de imagem são percorridas como uma escada ordenada pelo peso esperado da saída: escala ao quadrado multiplicada pela qualidade JPEG. O primeiro passo que mede abaixo do seu alvo vence. Se o resultado estiver confortavelmente abaixo do alvo, o motor tenta um passo melhor para dar um arquivo mais nítido e mantém o que couber.

A rasterização usa uma escada separada de 160 DPI até 36 DPI. Reduzir a resolução é a forma mais rápida de encolher uma digitalização, então a escada troca resolução e qualidade JPEG juntas em vez de levar qualquer uma ao extremo.

A regra da honestidade: sucesso significa outputBytes <= targetBytes, medido no arquivo final. Se nada couber, a ferramenta mostra o menor resultado real e quão acima do alvo ele está. Nunca arredonda para baixo, estima ou rotula um excesso como sucesso.

Passo 4

Por que a interface nunca congela

Web Worker

A análise de PDF e a codificação JPEG rodam em um worker dedicado, então rolagem, seleção e digitação permanecem responsivos enquanto um arquivo grande é processado.

OffscreenCanvas

O trabalho com imagens acontece em um canvas fora da tela que não toca o DOM. Navegadores sem ele fazem fallback para um caminho em blocos na thread principal.

Memória limitada

As páginas são processadas em lotes, bitmaps são fechados após o uso, URLs de objeto são revogadas e arquivos grandes são sinalizados antes de esgotar a memória de um celular.

O que não pode fazer

Limites que preferimos admitir

  • Sem OCR. Páginas digitalizadas continuam digitalizadas; a ferramenta não torna seu texto pesquisável.
  • Sem descriptografia de senha. PDFs criptografados são detectados e recusados.
  • Sem preservação de assinatura. Qualquer compressão invalida assinaturas criptográficas.
  • Sem recodificação JBIG2 ou JPX. Essas imagens são deixadas intocadas para evitar corrupção.
  • Sem redução de tamanho garantida. Um PDF de texto bem otimizado pode encolher apenas um pouco.
  • Sem processamento na nuvem. Se seu dispositivo ficar sem memória, um servidor não ajudará.

Perguntas sobre o motor

Respostas mais profundas sobre como o compressor se comporta.

Por que o compressor tenta várias configurações em vez de uma?

Porque a relação entre qualidade de imagem e tamanho de arquivo não é linear, e cada PDF é diferente. O motor percorre uma escada de alta qualidade para compressão agressiva, salva um PDF real em cada passo, mede-o e para no primeiro resultado que caiba no seu alvo. Esse resultado é o arquivo de melhor aparência que atende ao limite.

Por que não rasterizar sempre? Produz os menores arquivos.

Rasterizar transforma texto em pixels. O arquivo fica menor, mas o texto deixa de ser selecionável, links quebram e letras pequenas borram. É oferecido como último recurso para digitalizações, e o painel de resultados sempre avisa quando foi usado.

A ferramenta suporta PDFs protegidos por senha?

Ainda não. O PDF.js pode abrir um arquivo criptografado com senha, mas a biblioteca que reconstrói documentos não consegue recodificá-lo. Em vez de produzir um arquivo quebrado, a ferramenta detecta a criptografia e pede que você remova a senha em um leitor de PDF primeiro.

Por que um PDF só de texto quase não encolheu?

Texto e conteúdo vetorial já são compactos. Se 95% de um arquivo é texto e fontes, há muito pouco dado redundante a remover. Ferramentas que reportam economias enormes em tais arquivos geralmente estão rasterizando as páginas, o que é o motivo pelo qual esta ferramenta reporta o método usado.

E assinaturas digitais?

Qualquer modificação invalida uma assinatura criptográfica. Nenhuma ferramenta de compressão pode preservá-la. Mantenha o original assinado e comprima uma cópia se precisar enviar uma versão menor.

Veja funcionar no seu próprio arquivo.

Solte um PDF, escolha um alvo e observe o resultado medido.

Comprimir um PDF