A última vez que usei convert
para essa tarefa, especifiquei explicitamente o tamanho do destino via 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 convert
comando nem sempre usa o DPI como unidade padrão de densidade / formato de página; portanto, especificamos explicitamente o DPI com a -units
opção (caso contrário, você poderá obter resultados diferentes com diferentes combinações de versões / 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 qualidade média para economizar espaço, embora não pareça muito ruim quando impresso em papel.
Observe que, convert
por padrão, não altera a proporção da imagem com a operação de redimensionamento:
Redimensionar ajustará a imagem ao tamanho solicitado. NÃO preenche, o tamanho da caixa solicitada.
( Manual ImageMagick )
Dependendo da versão do ImageMagick e dos formatos de entrada envolvidos, pode ser correto omitir a -repage
opção. Às vezes, porém, é necessário e, sem essa opção, o cabeçalho do PDF pode conter dimensões muito pequenas. De qualquer forma, -repage
não deve doer.
Os cálculos usam aritmética inteira, uma vez 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 de Lineart
Se os arquivos PNG forem imagens em dois níveis (preto e branco, também conhecido como linear), a img2pdf
ferramenta produzirá 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
-repage a4
eu recebo uminvalid argument for option '-repage': a4