Comprimir PDF em Linux: utilizar QPDF e Ghostscript de forma adequada

Em Linux, podes otimizar a estrutura de um PDF no terminal com um comando documentado do QPDF ou reconstruí-lo com Ghostscript pdfwrite. Só a verificação do ficheiro de saída guardado permite saber se o novo ficheiro é mais pequeno e continua a fazer tudo o que precisas.

Otimização da estrutura ou reconstrução: que ferramenta é adequada?

Os dois programas utilizam abordagens fundamentalmente diferentes. O comando QPDF desta página mantém o conteúdo das tuas páginas e limita-se a voltar a guardar os objetos do ficheiro da forma mais compacta possível. Para isso, por exemplo, agrupa objetos em fluxos de objetos e volta a comprimir dados Flate. Não reduz a resolução das imagens nem as volta a codificar como JPEG. A otimização opcional de imagens do QPDF é uma etapa separada, com perdas, que a secção seguinte contextualiza brevemente. A documentação do QPDF descreve cada opção.

O Ghostscript funciona de outra forma. Com o dispositivo de saída pdfwrite, lê o PDF e cria um novo ficheiro a partir das instruções de desenho de cada página. O texto e os gráficos vetoriais são geralmente preservados como tal, pelo que as páginas não são simplesmente transformadas em imagens. No entanto, consoante as definições, o Ghostscript pode recalcular as imagens. Além disso, tudo o que não faça parte do aspeto visível da página pode sofrer alterações. O manual do Ghostscript sobre pdfwrite explica este funcionamento.

Alguns programas oferecem ainda uma terceira via: geram novamente cada página como imagem. Nesse processo, perdem-se geralmente o texto nativo, a pesquisa e os elementos interativos. Nenhum dos dois comandos desta página funciona dessa forma.

Três formas de reduzir o tamanho de um PDF e o que alteram no documento
MétodoO que aconteceImagensTexto e funcionalidades
QPDF, otimização da estruturaOs objetos e os dados Flate são guardados de forma mais compactaA resolução não é reduzida. Uma nova codificação JPEG opcional pode causar perda de detalhes.O conteúdo das páginas não é reconstruído; ainda assim, verifica o resultado
Ghostscript pdfwrite, reconstruçãoAs páginas são recriadas a partir das suas instruções de desenhoA resolução pode ser reduzida, consoante a predefiniçãoO texto e os vetores são geralmente preservados. As ligações, os formulários e os metadados podem mudar.
Gerar páginas como imagensCada página transforma-se numa imagemDependem da resolução escolhidaO texto nativo, a pesquisa e os elementos interativos perdem-se geralmente

Nenhum destes métodos garante um ficheiro mais pequeno. Como regra prática: se o teu PDF for composto sobretudo por texto e gráficos vetoriais, começa pelo QPDF. O mesmo se aplica quando pretendes alterar o mínimo possível as imagens, ligações ou formulários. O Ghostscript pode ser adequado quando as fotografias grandes ou as digitalizações representam a maior parte do tamanho e podes prescindir de alguma qualidade de imagem. O guia Comprimir PDF sem perda de qualidade explica o que significam, na prática, os métodos sem perdas e com perdas.

Os programas com interface gráfica seguem as mesmas abordagens. Segundo as suas próprias informações, o PDFsam distingue a simples otimização da estrutura na edição Basic de uma compressão de imagens própria nas edições Visual e Enhanced. Os guias mais antigos para scripts de gestores de ficheiros ou interfaces que executam o Ghostscript em segundo plano referem-se, em parte, a versões anteriores do Ubuntu. Por isso, não sigas os respetivos passos de instalação sem os verificar. Segundo o fabricante, o PDF24 Creator só está disponível para Windows, não existindo uma edição para Linux.

Se não quiseres instalar nada, podes utilizar o compressor de PDF no navegador. Processa o ficheiro no teu dispositivo, sem o enviar. No entanto, não o testámos especificamente em navegadores Linux. O guia Comprimir PDF sem envio do ficheiro explica a diferença entre o processamento local no navegador e o trabalho verdadeiramente sem ligação à Internet.

Verificar a versão e criar um ficheiro de saída separado

Visão geral dos comandos

Seleciona um dos seis comandos deste guia. Verás o comando sem alterações e uma explicação do significado de cada parte.

Os comandos provêm dos manuais oficiais do QPDF e do Ghostscript. Não os executámos em Ubuntu nem noutra distribuição. As versões instaladas no teu sistema podem ser diferentes das versões abrangidas pela documentação online.

Esta página não executa comandos nem apresenta a saída do terminal. Só verás as mensagens do teu sistema quando executares um comando tu próprio.

Mostrar a versão do QPDF

Mostra a versão instalada do QPDF. Verifica-a antes de utilizares os restantes comandos.

Mostra a versão instalada do QPDF.
qpdf --version

Também podes selecionar e copiar o comando diretamente no campo de código.

As partes do comando
qpdfPrograma
Invoca o programa de linha de comandos QPDF.
--versionMostrar versão
Apresenta a versão do QPDF utilizada no teu sistema.

Se a shell indicar que o comando não foi encontrado, é provável que o QPDF não esteja instalado. O nome do pacote e a instalação dependem da tua distribuição.

Localização no guia

Mostrar a versão do Ghostscript e os dispositivos de saída

Mostra a versão do Ghostscript e os dispositivos de saída disponíveis.

Mostra a versão do Ghostscript e os dispositivos de saída disponíveis.
gs -h

Também podes selecionar e copiar o comando diretamente no campo de código.

As partes do comando
gsPrograma
Invoca o Ghostscript. Em Unix, o programa chama-se gs.
-hAjuda
Apresenta a versão, as opções, os formatos, os dispositivos de saída disponíveis e o caminho de pesquisa.

Se a shell indicar que o comando não foi encontrado, é provável que o Ghostscript não esteja instalado. Anota a distribuição e a versão para poderes compreender os resultados mais tarde.

Localização no guia

Guardar a estrutura de forma mais compacta

Volta a guardar os objetos do ficheiro da forma mais compacta possível. As imagens não são reduzidas em resolução nem recodificadas como JPEG.

Comando QPDF da documentação: guarda a estrutura de forma mais compacta, sem reduzir a resolução das imagens nem voltar a codificá-las como JPEG.
qpdf "original.pdf" --object-streams=generate --compress-streams=y --decode-level=generalized --recompress-flate --compression-level=9 "optimiert-qpdf.pdf"

Também podes selecionar e copiar o comando diretamente no campo de código.

As partes do comando
qpdfPrograma
Invoca o programa de linha de comandos QPDF.
"original.pdf"Ficheiro de entrada
O PDF que será lido. O resultado é guardado num ficheiro separado.
--object-streams=generateCriar fluxos de objetos
Agrupa os objetos adequados em fluxos de objetos e comprime-os. O ficheiro de saída terá, pelo menos, a versão PDF 1.5.
--compress-streams=yComprimir fluxos
Comprime os fluxos com Flate, desde que ainda não estejam comprimidos de outra forma.
--decode-level=generalizedDescomprimir filtros gerais
Descomprime dados com filtros gerais suportados, como LZW, Flate, ASCII85 e ASCIIHex. Os dados JPEG (DCT) não são descomprimidos.
--recompress-flateVoltar a comprimir com Flate
Descomprime os fluxos Flate existentes e volta a comprimi-los. Isto pode tornar a gravação mais demorada.
--compression-level=9Nível de compressão
Seleciona para Flate o nível zlib mais elevado no intervalo documentado de 1 a 9. Os níveis mais elevados demoram mais tempo. Este valor não está relacionado com a qualidade JPEG.
"optimiert-qpdf.pdf"Ficheiro de saída
Nome do novo ficheiro. Nos dois comandos de verificação, este ficheiro é a entrada.

Só a comparação do número de bytes permite saber se o novo ficheiro é mais pequeno. Um nome de saída diferente não impede que um ficheiro existente com esse mesmo nome seja substituído. Por isso, escolhe um nome ainda não utilizado. O comando não garante que uma assinatura digital se mantenha válida.

Localização no guia

Reconstruir o PDF com pdfwrite

O Ghostscript lê o PDF e cria um novo ficheiro a partir das instruções de desenho de cada página, neste caso com a predefinição /ebook.

Exemplo do Ghostscript com a predefinição /ebook. Os detalhes das imagens e as funcionalidades do documento podem mudar.
gs -dSAFER -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -dPDFSETTINGS=/ebook -sOutputFile="optimiert-gs.pdf" "original.pdf"

Também podes selecionar e copiar o comando diretamente no campo de código.

As partes do comando
gsPrograma
Invoca o Ghostscript.
-dSAFERControlo de acesso
Restringe o acesso a ficheiros e dispositivos. Este é o comportamento predefinido desde a versão 9.50. Não constitui uma garantia geral de segurança.
-dBATCHTerminar depois
Termina o Ghostscript assim que os ficheiros indicados forem processados, em vez de passar para o modo interativo.
-dNOPAUSESem pausa
Suprime o pedido de confirmação e a pausa no fim de cada página.
-sDEVICE=pdfwriteDispositivo de saída
Seleciona pdfwrite, que cria um novo PDF. O texto e os gráficos vetoriais são geralmente preservados. Tudo o que não fizer parte do aspeto visual da página pode mudar.
-dPDFSETTINGS=/ebookPredefinição
Define um conjunto de parâmetros individuais com resolução de imagem média. O nome descreve uma finalidade de utilização, não um nível de qualidade nem uma redução garantida.
-sOutputFile="optimiert-gs.pdf"Ficheiro de saída
Define o nome do novo ficheiro.
"original.pdf"Ficheiro de entrada
O PDF que o Ghostscript lê.

Os detalhes das imagens e as funcionalidades do documento podem mudar, mesmo que as páginas tenham o mesmo aspeto. Não é garantido um tamanho ou uma qualidade específicos. Verifica o ficheiro de saída guardado e escolhe um nome de saída ainda não utilizado.

Localização no guia

Verificar a estrutura do ficheiro de saída

Verifica a sintaxe do ficheiro de saída guardado. Para o resultado do Ghostscript, substitui o nome do ficheiro.

Verifica a sintaxe do ficheiro de saída guardado. Para o resultado do Ghostscript, substitui o nome do ficheiro.
qpdf "optimiert-qpdf.pdf" --check

Também podes selecionar e copiar o comando diretamente no campo de código.

As partes do comando
qpdfPrograma
Invoca o programa de linha de comandos QPDF.
"optimiert-qpdf.pdf"Ficheiro a verificar
O ficheiro de saída anteriormente guardado pelo comando QPDF.
--checkVerificar a estrutura
Verifica a estrutura, a encriptação, a linearização e a codificação dos fluxos.

O código de retorno 0 indica uma verificação sem erros, 2 indica erros e 3 indica avisos. A verificação abrange apenas a estrutura do ficheiro. Não indica se o aspeto está correto, se os formulários e as ligações funcionam ou se o ficheiro é seguro.

Localização no guia

Apresentar o número de páginas

Apresenta o número de páginas do ficheiro de saída guardado. Executa novamente o comando com o nome do original e compara os dois números.

Apresenta o número de páginas do ficheiro de saída guardado. Volta a executar o comando com o nome do original e compara.
qpdf "optimiert-qpdf.pdf" --show-npages

Também podes selecionar e copiar o comando diretamente no campo de código.

As partes do comando
qpdfPrograma
Invoca o programa de linha de comandos QPDF.
"optimiert-qpdf.pdf"Ficheiro cujas páginas serão contadas
O ficheiro de saída anteriormente guardado pelo comando QPDF.
--show-npagesContar páginas
Apresenta o número de páginas do ficheiro indicado.

Ter o mesmo número de páginas não significa que o conteúdo, as imagens e as funcionalidades se mantenham inalterados. Examina as páginas.

Localização no guia

O botão só coloca o comando apresentado na área de transferência depois de clicares nele. Não lê a área de transferência, não guarda nada nem envia nada.

Os comandos desta página provêm dos manuais oficiais do QPDF e do Ghostscript. Não os executámos em Ubuntu nem noutra distribuição, pelo que este não é um guia testado em Ubuntu. Começa por verificar que versões estão instaladas no teu sistema. Os pacotes da tua distribuição podem diferir das versões descritas na documentação atual disponível na Internet.

Mostrar as versões instaladas

Mostra a versão instalada do QPDF.
qpdf --version
Mostra a versão do Ghostscript e os dispositivos de saída disponíveis.
gs -h

Se a shell indicar que um comando não foi encontrado, o programa provavelmente não está instalado. O nome do pacote e a forma de o instalar dependem da tua distribuição. Anota a distribuição e as versões para poderes compreender e reproduzir um resultado mais tarde.

Regras básicas para cada tentativa

  • Mantém o original intacto. A entrada e a saída devem ter sempre nomes de ficheiro diferentes.
  • Dá a cada ficheiro de saída um nome novo, ainda não utilizado, para não substituíres um ficheiro anterior.
  • Começa cada nova tentativa novamente a partir do original, e não do resultado da execução anterior.
  • Não utilizes opções ou scripts que substituam diretamente o ficheiro de entrada.

QPDF: otimizar a estrutura de armazenamento

Comando QPDF da documentação: guarda a estrutura de forma mais compacta, sem reduzir a resolução das imagens nem voltar a codificá-las como JPEG.
qpdf "original.pdf" --object-streams=generate --compress-streams=y --decode-level=generalized --recompress-flate --compression-level=9 "optimiert-qpdf.pdf"

O comando lê original.pdf e cria um novo ficheiro chamado optimiert-qpdf.pdf. As opções fazem com que os objetos sejam agrupados em fluxos de objetos, os fluxos de dados sejam comprimidos e os dados Flate sejam novamente comprimidos com o nível mais elevado. O processo não inclui o recálculo de imagens. Os fluxos de objetos exigem PDF 1.5. Se um destinatário exigir expressamente uma versão PDF mais antiga, este comando não é diretamente adequado.

O QPDF também pode otimizar imagens e voltar a codificar dados JPEG com uma qualidade selecionável. A opção de qualidade JPEG está disponível a partir da versão 12.1. Ambos os processos têm perdas e podem degradar ainda mais imagens JPEG já comprimidas. Utiliza-os apenas se depois verificares especificamente as imagens.

Ghostscript: reescrever o PDF com uma predefinição

Exemplo do Ghostscript com a predefinição /ebook. Os detalhes das imagens e as funcionalidades do documento podem mudar.
gs -dSAFER -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -dPDFSETTINGS=/ebook -sOutputFile="optimiert-gs.pdf" "original.pdf"

-sDEVICE=pdfwrite seleciona a saída PDF, -sOutputFile define o nome do novo ficheiro e o ficheiro de entrada aparece no fim. -dBATCH e -dNOPAUSE impedem que o Ghostscript fique à espera de introdução de dados. -dSAFER também aparece desta forma nos exemplos do guia da linha de comandos do Ghostscript. A predefinição /ebook é apenas um ponto de partida, não uma recomendação para todos os ficheiros.

Compreender corretamente as predefinições do Ghostscript

Com -dPDFSETTINGS, selecionas de uma só vez um conjunto completo de parâmetros individuais. O nome de uma predefinição descreve uma finalidade de utilização. Não representa um nível de qualidade nem uma redução de tamanho específica.

Predefinições para -dPDFSETTINGS segundo o manual atual do Ghostscript (versão 10.09.0). A versão que tens instalada pode ser diferente.
PredefiniçãoFinalidade previstaRedução da resolução de imagens a cores e em tons de cinzento
/screenVisualização no ecrã, baixa resoluçãoAtiva. Valor pretendido de 72 dpi, apenas para imagens com resolução superior a 1,5 vezes esse valor.
/ebookResolução médiaAtiva. Valor pretendido de 150 dpi, apenas para imagens com resolução superior a 1,5 vezes esse valor.
/printerImpressãoNão ativada por predefinição
/prepressPré-impressãoNão ativada por predefinição. Não é automaticamente a opção mais fiel ao original.
/defaultUtilização geralNão ativada por predefinição

Então /prepress oferece a melhor qualidade? Não. O manual salienta expressamente que /prepress não é a definição mais fiel ao original. Sem -dPDFSETTINGS, o resultado pode manter-se mais próximo do original. /prepress também não garante o ficheiro mais pequeno.

Os valores pretendidos de /screen e /ebook não significam que todas as imagens passem a ter exatamente 72 ou 150 dpi. As imagens abaixo do limiar não têm a resolução reduzida e mantêm a sua resolução. Isso não significa necessariamente que fiquem completamente inalteradas, pois os restantes parâmetros da predefinição, por exemplo os relativos à codificação de imagens ou às cores, podem modificá-las na mesma. A opção -r não substitui a redução da resolução. Controla apenas a resolução quando o Ghostscript precisa de renderizar partes como alternativa e não reduz as imagens incorporadas. Segundo o manual, muitas vezes é preferível definir parâmetros individuais de forma específica em vez de depender de uma predefinição.

Não utilizes a mesma predefinição para todos os ficheiros. Um documento de texto, um catálogo de fotografias e uma digitalização reagem de formas diferentes. No caso das digitalizações, o melhor é começar logo pelas definições de digitalização. O guia Reduzir o tamanho de um PDF digitalizado explica como fazê-lo.

Verificar texto, ligações, formulários e assinaturas

O facto de um PDF ter o mesmo aspeto depois da compressão não prova que tudo o que estava guardado tenha sido preservado. O Ghostscript reconstrói o ficheiro. Segundo a explicação do Ghostscript sobre a otimização de PDF, um aspeto idêntico pode ocultar instruções e metadados alterados. Mesmo depois de utilizares o QPDF, verifica as funcionalidades que são importantes para ti:

  • Seleciona e copia texto e experimenta a pesquisa.
  • Clica nas ligações e nos marcadores.
  • Se o ficheiro for um formulário, preenche os campos e guarda-os para testar.
  • Verifica informações como o título ou o autor, se o destinatário as utilizar.
  • Se for exigida uma norma específica, como PDF/A, verifica-a com uma ferramenta própria para esse fim. Nenhum dos comandos apresentados aqui garante essa conformidade.

PDFs com assinatura digital

Nenhum dos dois comandos pode garantir que uma assinatura digital continue válida após a reescrita. Por isso, a compressão não é uma forma adequada de reduzir o tamanho de um PDF assinado. Conserva o original assinado sem alterações. Se outra pessoa tiver assinado o documento e precisares de uma versão mais pequena, obtém o ficheiro de origem não assinado ou fala com quem o assinou. Combina uma nova assinatura com o emissor ou o destinatário. A página da Adobe sobre as limitações dos PDFs assinados fornece mais contexto. Uma assinatura visível digitalizada não é uma assinatura digital.

Remover a proteção por palavra-passe ou as restrições de edição não faz parte da redução do tamanho, e não encontrarás aqui comandos para o fazer. Pede antes ao remetente uma versão adequada. Encontras mais informações sobre como lidar com estes documentos no guia Compreender assinaturas e formulários.

Comparar o tamanho do resultado e conservar o original

O facto de um comando terminar sem mensagens de erro ainda não diz nada sobre o resultado. Compara o tamanho exato do original e do ficheiro de saída em bytes, não apenas valores arredondados em MB. Podes calcular a percentagem de redução com a calculadora da taxa de compressão.

Verificar a sintaxe e o número de páginas

Verifica a sintaxe do ficheiro de saída guardado. Para o resultado do Ghostscript, substitui o nome do ficheiro.
qpdf "optimiert-qpdf.pdf" --check

O QPDF indica uma verificação sem erros com o código de retorno 0, erros com 2 e avisos com 3. A verificação abrange apenas a estrutura do ficheiro. Não indica se os formulários, as ligações e as imagens continuam a funcionar e a ter o mesmo aspeto que antes.

Apresenta o número de páginas do ficheiro de saída guardado. Volta a executar o comando com o nome do original e compara.
qpdf "optimiert-qpdf.pdf" --show-npages

Verificar num visualizador de PDF

  1. Volta a abrir o ficheiro de saída guardado a partir da respetiva pasta.
  2. Percorre todas as páginas e compara o formato e a orientação com o original.
  3. Observa as imagens, o texto pequeno e as linhas finas com uma ampliação elevada.
  4. Testa a pesquisa, as ligações e os formulários conforme descrito na secção anterior.
  5. Se possível, abre também o ficheiro num segundo visualizador.

Maior, inalterado ou vazio?

O Ghostscript também pode aumentar o tamanho de um PDF. O ficheiro é reconstruído e codificado de outra forma, e as novas instruções por vezes precisam de mais espaço do que as antigas. Também há pouco a ganhar com o QPDF se o ficheiro já estiver guardado de forma compacta.

Um resultado maior ou apenas ligeiramente mais pequeno pode, ainda assim, ser válido. Só as mesmas verificações do ficheiro guardado aplicadas a qualquer outra saída permitem confirmá-lo, pois o tamanho, por si só, nada diz sobre erros ou funcionalidades perdidas. No fim, conserva o ficheiro mais adequado; muitas vezes, é simplesmente o original. O caso é diferente quando o ficheiro de saída está vazio, ilegível ou danificado. Isso é uma tentativa falhada, não uma compressão particularmente forte. Não envies esse ficheiro; lê as mensagens no terminal e volta a começar a partir do original, com um novo nome de saída.

Se o PDF continuar demasiado grande para o limite de um destinatário, encontras os próximos passos no guia O PDF não fica mais pequeno. Em qualquer caso, conserva o original até que a nova versão tenha sido recebida e aceite.

Preferências de privacidade

Escolha se permite a análise de utilização e a publicidade opcionais. Nesta pré-visualização não publicada, ambas permanecem desativadas mesmo que as permita. As ferramentas de documentos funcionam em qualquer caso. Pode alterar a sua escolha a qualquer momento no rodapé.

Definições necessárias

Necessário

As suas preferências e o tema de cores são guardados localmente. As ferramentas de documentos estão disponíveis sem os serviços opcionais.

Inativo

Medição opcional da utilização. Atualmente inativa: ao permitir, a sua preferência é guardada, mas nenhum serviço de análise é ativado nesta pré-visualização.

Inativo

Publicidade opcional. Atualmente inativa: ao permitir, a sua preferência é guardada, mas nenhum serviço de publicidade é ativado nesta pré-visualização.

A análise de utilização e a publicidade opcionais estão desativadas.