A última vez que usei convert
para essa tarefa, eu especifiquei explicitamente o tamanho do destino por meio do redimensionamento:
$ i=150; convert a.png b.png -compress jpeg -quality 70 \
-density ${i}x${i} -units PixelsPerInch \
-resize $((i*827/100))x$((i*1169/100)) \
-repage $((i*827/100))x$((i*1169/100)) multipage.pdf
O comando convert
nem sempre usa DPI como unidade padrão de densidade / formato de página, portanto, especificamos explicitamente DPI com a opção -units
(caso contrário, você poderá obter resultados diferentes com diferentes versões / combinações de formatos de entrada). O novo tamanho (especificado via -resize
) é a dimensão de uma página DIN A4 em pixels . O argumento de redimensionamento especifica o tamanho máximo da página. Qual resolução e qualidade escolher exatamente depende do caso de uso - selecionei 150 DPI e a qualidade média para economizar espaço enquanto não parece tão ruim quando impresso em papel.
Observe que convert
por padrão não altera a proporção com a operação de redimensionamento:
Resize will fit the image into the requested size. It does NOT fill, the requested box size.
Dependendo da versão do ImageMagick e dos formatos de entrada envolvidos, pode ser ok omitir a opção -repage
. Mas às vezes é necessário e sem essa opção o cabeçalho do PDF pode conter dimensões muito pequenas. Em qualquer caso, o -repage
não deve doer.
Os cálculos usam aritmética inteira, já que bash
apenas suporta isso. Com zsh
, as expressões podem ser simplificadas, ou seja, substituídas por $((i*8.27))x$((i*11.69))
.
Imagens Lineart
Se os arquivos PNG tiverem imagens de dois níveis (preto e branco também), a img2pdf
tool produz resultados superiores ao ImageMagick convert
. Isso significa que img2pdf
é mais rápido e produz PDFs menores.
Exemplo:
$ img2pdf -o multipage.pdf a.png b.png
ou:
$ img2pdf --pagesize A4 -o multipage.pdf a.png b.png