Ir para o conteúdo
6 min de leitura

Comprimir PDF com Ghostscript e qpdf no terminal

Comprima PDF com Ghostscript e qpdf na linha de comando: comandos prontos, presets /prepress, /ebook e /screen, remoção de senha antes e quando o qpdf não reduz imagens.

Para comprimir um PDF pelo terminal, use o Ghostscript com -dPDFSETTINGS=/ebook: ele reamostra as imagens para uma resolução menor e recompacta o arquivo, que é onde está quase todo o peso. O qpdf não reduz imagens; ele só reempacota o arquivo sem perda, o que serve para limpar a estrutura. Os níveis do AjustaPDF usam os mesmos presets do Ghostscript: leve é /prepress, média é /ebook e forte é /screen.

Dois programas, duas coisas diferentes

Os dois são ferramentas de linha de comando gratuitas e abertas, e muita gente os usa juntos sem saber o que cada um faz. A diferença está em o que é alterado dentro do arquivo:

FerramentaO que fazReduz imagens?Perde qualidade?
qpdfReorganiza objetos, recompacta fluxos e remove redundânciaNãoNão
Ghostscript (pdfwrite)Reescreve o PDF e reamostra as imagens conforme o presetSimSim, nas imagens
qpdf depois do GhostscriptLimpa a estrutura do arquivo já reduzidoNão (já foi feito pelo Ghostscript)Não

Se o PDF é um relatório de texto, o qpdf sozinho pode bastar. Se é um escaneado, o Ghostscript é indispensável, porque só ele mexe na resolução das imagens.

Instalar as duas ferramentas

No macOS, com o Homebrew, um único comando instala as duas. No Debian e no Ubuntu, use o apt. No Windows, os instaladores oficiais dos dois projetos funcionam, e o comando precisa estar no PATH para ser chamado de qualquer pasta:

brew install ghostscript qpdf
sudo apt install ghostscript qpdf

Confirme a instalação com gs --version e qpdf --version. Se algum deles não for encontrado, o terminal ainda não enxerga o programa, e reabrir a janela costuma resolver.

Comprimir com o Ghostscript

O comando abaixo gera saida.pdf a partir de entrada.pdf no preset de tela. As opções -dNOPAUSE, -dQUIET e -dBATCH impedem que o programa pare para perguntar algo no meio do caminho, e -dSAFER limita o que o PostScript embutido no arquivo pode fazer no seu sistema. Use -dSAFER sempre que o PDF vier de fora:

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.5 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -dSAFER -sOutputFile=saida.pdf entrada.pdf

Troque só o preset para mudar o nível:

PresetNível equivalente no AjustaPDFIndicado para
/prepressLeveImpressão, quando a qualidade das fotos importa
/ebookMédiaTela, leitura e anexo de e-mail
/screenForteVisualização rápida, quando o limite de envio é apertado

O Ghostscript aceita parâmetros finos de resolução de cor, de tons de cinza e de imagens monocromáticas. Eles são úteis para quem precisa de uma regra específica para um tipo de documento. O AjustaPDF expõe apenas os três presets, e o guia acima cobre os casos do dia a dia, sem parâmetros avançados.

Depois de cada compressão, compare os tamanhos com ls -lh entrada.pdf saida.pdf. Se o saida.pdf for maior ou igual, descarte-o. Esse caso aparece sobretudo com /prepress em arquivos que já foram otimizados.

Otimizar a estrutura sem perda com o qpdf

O qpdf entra depois, para limpar o que sobrou no arquivo. Ele recompacta os fluxos com Flate, que é o mesmo algoritmo do ZIP, e gera fluxos de objetos, que deixam o arquivo mais enxuto:

qpdf --object-streams=generate --compress-streams=y --recompress-flate --compression-level=9 entrada.pdf saida.pdf

O ganho com o qpdf é pequeno em PDFs gerados por editores modernos, que já vêm organizados. Ele vale mais em arquivos antigos, montados por partes ou com muitos objetos repetidos. Para ver o que pesa de verdade, use pdfimages -list entrada.pdf: a lista mostra as imagens e a resolução de cada uma, e normalmente uma ou duas explicam quase todo o tamanho. Se a causa for uma página escaneada, o guia sobre PDF escaneado pesado explica o que fazer antes de comprimir.

PDF com senha: remova antes de comprimir

O Ghostscript não abre um PDF criptografado. Se o comando falhar sem mensagem clara, a causa costuma ser a senha de abertura. Remova a senha com o qpdf, comprima e proteja o arquivo de novo no final. Para não deixar a senha no histórico do shell, coloque-a em um arquivo de texto:

  1. Crie o arquivo senha.txt com a senha em uma linha e rode qpdf --password-file=senha.txt --decrypt entrada.pdf sem-senha.pdf.
  2. Comprima o sem-senha.pdf com o comando do Ghostscript acima.
  3. Proteja o resultado com qpdf --encrypt SENHA SENHA 256 -- comprimido.pdf protegido.pdf, trocando SENHA pela senha de verdade.
  4. Apague senha.txt, sem-senha.pdf e comprimido.pdf, que ficaram no disco sem criptografia.

Se você não tem a senha de abertura, não há comando que a substitua. O qpdf só decifra com a senha informada. Quem não tem a senha pode usar o desbloquear PDF, que também exige a senha atual e não tenta adivinhá-la.

Comprimir vários arquivos de uma vez

Para uma pasta inteira, um laço de shell resolve. O exemplo grava cada resultado com o prefixo min- e mantém os originais intactos:

for f in *.pdf; do gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.5 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -dSAFER -sOutputFile="min-$f" "$f"; done

Aspas em volta de "$f" são obrigatórias, senão nomes com espaço quebram o comando. Ao final, confira o tamanho de cada min- com o original antes de enviar qualquer um deles.

Erros comuns

  • Esperar que o qpdf reduza fotos. Ele não reamostra imagens. Para reduzir fotos, o Ghostscript é o único dos dois que faz isso.
  • Usar /screen em documento para impressão. As fotos ficam a 72 DPI e não voltam a ter detalhe. Use /prepress ou /ebook quando a arte importa.
  • Não conferir o tamanho. A saída pode ser maior do que a entrada, e o comando não avisa.
  • Rodar o Ghostscript sobre um PDF criptografado. Remova a senha antes, como descrito acima.

Para validar o resultado, abra o arquivo comprimido com zoom de 100% em duas páginas: uma com foto e uma só de texto. O texto precisa estar nítido em qualquer zoom, e a foto precisa ser aceitável para o destino. Se a foto ficou ruim demais, troque o preset pelo nível acima e teste de novo, em vez de aceitar a primeira saída.

Quando o AjustaPDF resolve melhor que o terminal

Para um arquivo de vez em quando, o terminal tem uma vantagem clara: o PDF nunca sai do seu computador. Para uso frequente ou para quem não quer instalar nada, a ferramenta de comprimir PDF do AjustaPDF roda os mesmos programas no servidor, com os níveis leve, média e forte. O arquivo é apagado assim que a resposta sai, e o site não guarda a senha quando houver uma.

A diferença é de lugar, não de resultado. Se o documento tem dados que não podem ser enviados para um servidor, rode os comandos deste guia. Quem entende o que é processamento no servidor e no navegador pode ler o guia sobre PDF online e segurança antes de decidir.

Perguntas frequentes

Qual comando usar para comprimir PDF no Linux?

Use o Ghostscript com o preset /ebook: gs -sDEVICE=pdfwrite -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile=saida.pdf entrada.pdf. O preset reamostra as imagens para uma resolução de tela e mantém o texto como texto.

Qual a diferença entre os presets /prepress, /ebook e /screen?

São três níveis de reamostragem de imagem, do mais fiel ao mais leve. /prepress serve para impressão e mexe pouco no tamanho, /ebook é o equilíbrio para tela e e-mail, e /screen é o mais agressivo. O AjustaPDF usa os três como níveis leve, média e forte.

O qpdf comprime PDF?

Reduz pouco, e só sem perda. O qpdf reorganiza os objetos do arquivo e recomprime os fluxos internos, mas não reamostra imagens. Ele ajuda em PDFs de texto gerados por programas que deixam redundância. Para fotos e páginas escaneadas, use o Ghostscript.

O Ghostscript pode deixar o PDF maior?

Pode, sobretudo quando o arquivo já foi otimizado e o preset tenta reamostrar imagens que já estão pequenas. Compare o tamanho do entrada.pdf com o do saida.pdf. O servidor do AjustaPDF faz essa comparação e devolve o original quando o resultado é maior.

Dá para comprimir um PDF com senha pelo terminal?

Dá, em três passos: remova a senha com qpdf --decrypt, comprima com o Ghostscript e proteja de novo com qpdf --encrypt. O Ghostscript não abre arquivos criptografados, por isso a remoção vem antes. Guarde a senha em um arquivo temporário e apague-o depois.