Ir para o conteúdo
5 min de leitura

Juntar e comprimir PDF no Linux pelo terminal

Para juntar e comprimir PDF no Linux, use qpdf e Ghostscript pelo terminal. Veja os comandos testados, a instalação no Ubuntu e como fazer lotes.

Para juntar PDF no Linux pelo terminal, instale o qpdf e rode qpdf --empty --pages a.pdf b.pdf -- saida.pdf: o comando copia as páginas na ordem informada, sem recomprimir o conteúdo. Para reduzir o tamanho, use o Ghostscript com o preset /ebook, que reamostra as imagens para 150 DPI e mantém o texto. Os comandos deste guia foram testados com qpdf 12.4.2 e Ghostscript 10.08.

Instalar as ferramentas no Ubuntu e no Debian

Três pacotes cobrem o caso: o qpdf para juntar e dividir, o Ghostscript para comprimir e o poppler-utils para contar páginas e ver o que pesa dentro do arquivo. No Ubuntu e no Debian, o comando é o mesmo:

sudo apt install qpdf ghostscript poppler-utils

Em outras distribuições, procure os pacotes com os mesmos nomes no gerenciador de pacotes. Depois confirme com qpdf --version e gs --version, e veja se o pdfinfo responde.

ProgramaPara que serve aquiExemplo
qpdfJuntar, dividir e girar sem recomprimirqpdf --empty --pages a.pdf b.pdf -- saida.pdf
pdfuniteJuntar em um comando curtopdfunite a.pdf b.pdf saida.pdf
Ghostscript (gs)Comprimir, reamostrando as imagensgs -sDEVICE=pdfwrite -dPDFSETTINGS=/ebook ...
pdfinfoContar páginas e ler o tamanho da páginapdfinfo entrada.pdf

Juntar com qpdf ou pdfunite

O qpdf é a opção que mais controle dá. A forma --empty cria um arquivo novo e puxa as páginas de cada origem, na ordem em que aparecem. Para juntar três arquivos, basta listá-los:

qpdf --empty --pages 01.pdf 02.pdf 03.pdf -- juntado.pdf

Confira o resultado com pdfinfo juntado.pdf e procure a linha Pages. O total precisa ser a soma das páginas de cada arquivo de origem. Se o número não bater, abra o arquivo que falhou com um leitor antes de tentar de novo, porque o problema costuma estar em um dos arquivos de origem.

O pdfunite faz o mesmo com menos digitação, e não aceita intervalos de páginas. Use-o quando só precisa colar arquivos inteiros, na ordem da linha de comando. Em ambos os casos, o arquivo final não traz os marcadores do documento original. Se o sumário clicável é importante, recrie-o depois, e o guia sobre links e sumário ao juntar mostra o que sobrevive à junção.

Dividir por intervalo

Para extrair páginas, repita o nome do arquivo de origem depois de --pages e informe a lista. A sintaxe aceita intervalos, páginas soltas e z como última página. Este comando gera um PDF com as páginas 1 a 40 do arquivo entrada.pdf:

qpdf entrada.pdf --pages entrada.pdf 1-40 -- parte1.pdf

Para as páginas 41 até o fim, troque o intervalo por 41-z. Se a lista apontar para uma página que não existe, o qpdf para com erro e não grava o arquivo, o que evita um PDF pela metade. Depois de dividir, confira cada parte com pdfinfo e some as páginas: quando os intervalos cobrem o arquivo inteiro, o total das partes é igual ao do original. A ferramenta de dividir PDF do AjustaPDF aceita a mesma sintaxe de intervalos, e o guia sobre dividir por capítulo mostra como escolher os intervalos de um documento longo.

Comprimir com Ghostscript

O Ghostscript é o único dos três que reduz a resolução das imagens. O comando abaixo gera saida.pdf no preset /ebook, de 150 DPI:

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

Troque /ebook por /prepress para manter mais qualidade nas imagens, ou por /screen para o menor arquivo. Os três presets e o que cada um mexe estão no guia sobre comprimir PDF com Ghostscript e qpdf, junto com o passo a passo para arquivos com senha. Compare o resultado com ls -lh entrada.pdf saida.pdf antes de usar o arquivo.

Descobrir o que pesa antes de comprimir

Comprimir sem olhar a causa desperdiça tempo. O pdfimages -list mostra cada imagem do arquivo, com a resolução em pixels por polegada (x-ppi e y-ppi) e o tamanho. Se uma ou duas imagens explicam quase todo o peso, o preset vai atacar exatamente elas. Quando o arquivo é só texto e pesa muito, o problema costuma estar nas fontes, e o Ghostscript ajuda pouco nesse caso.

Processar uma pasta inteira

Para um lote, um laço de shell resolve. O exemplo grava cada resultado em uma pasta min, e não ao lado dos originais, para não reprocessar os arquivos já comprimidos numa segunda rodada:

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

O laço não confere se o resultado ficou menor. Depois da rodada, rode ls -l *.pdf min/ e descarte os arquivos que cresceram. Em pastas com nomes que têm espaço, troque o laço por find com -print0 para não quebrar a lista de arquivos.

O que o Linux não faz sozinho

Os três programas não reconhecem texto em imagem, então um escaneado continua sem busca depois de juntado ou comprimido. Eles também não dão uma saída amigável para quem não usa terminal. Outro limite aparece em formulários: ao comprimir com Ghostscript, os campos preenchidos viram texto e deixam de ser editáveis. Junte antes e comprima só depois de preencher. Se o arquivo tem senha para abrir, remova-a antes, porque o Ghostscript não abre PDF criptografado.

Quando o navegador é suficiente

Se você precisa juntar ou comprimir uma vez, o terminal pode ser mais trabalho do que o problema. A ferramenta de juntar PDF do AjustaPDF roda as mesmas bases, qpdf para juntar e Ghostscript para comprimir, no servidor, e apaga o arquivo depois da resposta. Para documentos que não podem sair da sua máquina, o terminal continua sendo a escolha certa. Para montar uma imagem em PDF no terminal, o guia sobre ImageMagick mostra o caminho.

Perguntas frequentes

Qual comando junta dois PDFs no Linux?

Use qpdf --empty --pages a.pdf b.pdf -- saida.pdf, que copia as páginas na ordem informada sem recomprimir o conteúdo. Se o pdfunite estiver instalado, pdfunite a.pdf b.pdf saida.pdf faz o mesmo. Os dois foram testados com qpdf 12.4.2 e poppler, e o resultado tinha o número de páginas somado.

Como extrair só algumas páginas de um PDF pelo terminal?

Com qpdf entrada.pdf --pages entrada.pdf 1-3,7,10-z -- saida.pdf. O z representa a última página, e a lista pode misturar intervalos e páginas soltas. O resultado é um único arquivo com essas páginas, e não um arquivo por intervalo.

O Ghostscript pode deixar o PDF maior?

Pode, sobretudo quando o arquivo já está otimizado e o preset tenta reamostrar imagens pequenas. Compare os tamanhos com ls -lh antes de descartar o original. Se o resultado for maior, mantenha o arquivo de origem e não use a versão comprimida.

O qpdf reduz o tamanho de um PDF escaneado?

Pouco ou nada. O qpdf reorganiza a estrutura e recompacta os fluxos sem perda, mas não reduz a resolução das imagens. Para fotos de páginas escaneadas, o Ghostscript é a ferramenta que mexe no peso de verdade.

Dá para fazer tudo isso no Linux sem instalar nada?

Não há um passo sem instalação, porque qpdf, Ghostscript e poppler são programas de terminal. No Ubuntu e no Debian, um único apt install traz os três. Se não quiser instalar, o navegador faz as mesmas tarefas em uma página, com as limitações de cada site.