Otimização eficiente de PDF com o Ghostscript CLI
Para reduzir o tamanho de um PDF com o Ghostscript, crie um candidato separado e compare-o com o
original antes de compartilhá-lo. A predefinição /ebook é um ponto de partida para documentos com
imagens grandes, mas uma conversão bem-sucedida também pode gerar um arquivo maior. Este passo a
passo mantém os dois arquivos e oferece uma forma de decidir se o candidato é útil.
Decida se reescrever o PDF é apropriado
O dispositivo pdfwrite do Ghostscript cria um novo PDF a partir das operações de desenho da
entrada. Ele não apenas comprime os bytes originais. A Artifex explica por que isso pode alterar
recursos do documento e aumentar o tamanho do arquivo.
Use este fluxo de trabalho para uma cópia descartável, destinada a compartilhamento, de um documento cuja aparência você consiga verificar. Guarde os originais assinados: a cópia reescrita não mantém as assinaturas digitais válidas deles. Se você precisa de formulários preenchíveis, tags de acessibilidade e ordem de leitura, anexos ou conformidade para arquivamento, use um fluxo de trabalho que preserve e valide explicitamente esses recursos. Olhar as páginas renderizadas não basta para comprovar que eles foram mantidos. Links, marcadores, texto pesquisável e metadados também precisam ser verificados quando você depende deles.
Configure o Ghostscript
Você precisa do Ghostscript, dos comandos pdfinfo e pdftoppm do Poppler, do Bash e de um
visualizador de PDF. No Ubuntu, os pacotes se chamam ghostscript e poppler-utils. Use pacotes com
manutenção ativa e registre suas versões:
gs --version && pdfinfo -v && pdftoppm -v
Os comandos abaixo foram testados no Linux com Ghostscript 10.07.1 e Poppler 26.08.0, e com o Ghostscript 10.02.1 e o Poppler 24.02.0 do Ubuntu 24.04. São exemplos em Bash; a execução no Windows e no macOS não é abordada aqui.
Crie um candidato sem sobrescrever um resultado anterior
Trabalhe em um diretório que contenha seu PDF com o nome original.pdf. Mantenha esse arquivo durante
toda a comparação. Execute este bloco inteiro no Bash, incluindo os parênteses:
(
set -eu
pdfinfo ./original.pdf
mkdir ./pdf-review
gs -sDEVICE=pdfwrite -dPDFSETTINGS=/ebook \
-dCompatibilityLevel=1.7 -dAutoRotatePages=/None \
-dNOPAUSE -dBATCH -dPDFSTOPONERROR \
-sOutputFile=./pdf-review/candidate.pdf -f ./original.pdf
)
O pdfinfo inicial verifica se o Poppler consegue ler a entrada. mkdir propositalmente não
tem -p: se pdf-review já existir, o bloco para antes de o Ghostscript ser executado,
mesmo sem um terminal interativo. Seu resultado anterior e original.pdf permanecem intactos. Os
parênteses mantêm set -eu restrito a este bloco.
-sDEVICE=pdfwrite seleciona a saída em PDF. /ebook pode reduzir o detalhe das imagens; o PDF 1.7
e a rotação automática de páginas desativada são escolhas explícitas para este teste.
-dNOPAUSE -dBATCH evita prompts entre páginas e encerra após o processamento. -dPDFSTOPONERROR pede ao
Ghostscript que pare em erros de PDF em vez de tentar sua recuperação habitual, como descrito na
documentação de uso.
Nenhum dos dois programas é um validador completo de PDF. Leia os avisos e, se a conversão falhar,
trate qualquer coisa que tenha sobrado em pdf-review como incompleta.
Compare os tamanhos de arquivo
Depois que a conversão for bem-sucedida, compare os bytes reais e o número de páginas:
wc -c ./original.pdf ./pdf-review/candidate.pdf
pdfinfo ./original.pdf && pdfinfo ./pdf-review/candidate.pdf
As duas primeiras linhas de wc são os tamanhos individuais; a linha total soma os
dois. Nos dois relatórios do pdfinfo, compare Pages e Page size. Uma contagem de
bytes menor não justifica uma página ausente ou uma mudança inesperada de tamanho. Em documentos com
tamanhos de página variados, verifique também cada página no visualizador.
Renderize os dois documentos com o Poppler, de forma independente do Ghostscript:
(
set -eu
mkdir ./pdf-review/previews
pdftoppm -r 150 -png ./original.pdf ./pdf-review/previews/original
pdftoppm -r 150 -png ./pdf-review/candidate.pdf ./pdf-review/previews/candidate
)
Isso gera um PNG por página, com os prefixos correspondentes original- e candidate-. O comando se
recusa a reutilizar um diretório previews existente. Abra as imagens correspondentes lado a lado
e inspecione texto pequeno, linhas finas, fotografias, cores e orientação das páginas. Essas
prévias em 150 dpi ajudam a encontrar mudanças visíveis; abra também os PDFs no zoom de
visualização pretendido ou faça uma prova no tamanho de impressão pretendido. Tente selecionar e
pesquisar texto e seguir links importantes no candidato.
Use o candidato somente se ele for menor e passar nas verificações que seu documento exige. Caso
contrário, continue usando o original. PDFs de texto ou vetoriais já compactos podem crescer, e uma
digitalização muito comprimida pode ter pouco a economizar. Para testar outra configuração,
renomeie o diretório de revisão para preservar esse teste e execute novamente a partir de
original.pdf. Recomprimir um candidato com perdas pode descartar mais detalhes.
Predefinições de otimização de PDF
Estes são os alvos de redução de resolução para imagens coloridas e em tons de cinza nas versões testadas. As definições das predefinições do Ghostscript também especificam configurações separadas para imagens monocromáticas:
| Predefinição | Alvo para cor e tons de cinza | O que observar |
|---|---|---|
/screen | 72 dpi | Detalhes finos das imagens podem desaparecer. |
/ebook | 150 dpi | Verifique digitalizações e texto pequeno dentro de imagens. |
/printer | 300 dpi | Verifique cores e fontes para a impressora pretendida. |
/prepress | 300 dpi | Não garante que o arquivo esteja pronto para impressão. |
A redução de resolução também usa um limite de resolução; ela não redimensiona todas as imagens
para o alvo. Essas predefinições alteram mais do que a resolução, incluindo o tratamento de cores e
fontes. /prepress não é uma chave de qualidade máxima. Para um requisito específico de imagem, use
os controles individuais de imagem
em vez de adicionar mais predefinições.
Escolha um nível de compatibilidade
O exemplo solicita explicitamente o PDF 1.7 depois de selecionar /ebook. Use um nível mais
antigo somente quando um destinatário exigir. Não reduza a versão do PDF apenas para tentar obter um
arquivo menor: isso pode desativar recursos de compressão, e uma saída abaixo do PDF 1.4 pode forçar
páginas com transparência a virar bitmaps. Consulte as
limitações do pdfwrite
antes de alterar essa configuração.
Para uma coleção de PDFs, avalie documentos representativos antes de automatizar a conversão. Mantenha um local de saída separado para cada entrada e compare os resultados individualmente; uma digitalização bem-sucedida diz pouco sobre um desenho vetorial ou um formulário.
Erros comuns e soluções
- Um comando está faltando: Instale o pacote correspondente e verifique se o executável está no
PATH. O Poppler fornece os dois comandos de inspeção usados aqui. File existsvindo demkdir: A proteção contra sobrescrita funcionou. Inspecione o teste anterior e renomeie o diretório dele antes de iniciar outro. Não adicione-ppara contornar a proteção.- Entrada ausente, criptografada ou corrompida: Verifique o nome do arquivo e abra o original em um visualizador. Obtenha uma cópia de origem legível e autorizada, se necessário. Não use uma conversão parcial.
- Substituição de fontes ou aparência inesperada: Prefira exportar novamente o documento de origem com as fontes incorporadas. Um arquivo menor com texto alterado não é um resultado aceitável.
- Permissão negada ou disco cheio: Use um diretório de trabalho com permissão de escrita e espaço para o novo PDF e as prévias das páginas. Mantenha o teste com falha separado ao tentar novamente.
Observação sobre licenciamento
O Ghostscript está disponível sob a AGPL e sob uma licença comercial. Se você pretende distribuí-lo com um aplicativo ou operar um serviço, consulte as informações de licenciamento da Artifex para esse uso.
