La herramienta ImageMagick nos permite llevar a cabo esta tarea de manera sencilla.
La sintáxis es la siguiente:
$ convert a.png b.png c.png (...) x.png multipagina.pdf
Ahora bien, es muy probable que el resultado no se ajuste a un tamaño de papel estándar para lo cual debemos definir de manera explícita para el destino mediante la opción ‘resize’:
$ i=150; convert a.png b.png c.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)) multipagina.pdf
El comando convert no siempre usa DPI como la unidad predeterminada para la densidad/formato de página, así pues debemos especificar de manera explicita los DPI con la opción -units (de otro modo es probable que obtengamos resultados diferentes con distintas versiones/combinaciones de formato de entrada). El nuevo tamaño (especificado vía -resize) es la dimensión de una hoja A4 en pixeles. El argumento resize especifica el tamaño máximo de página. La resolución y calidad exacta a escoger depende del uso en cada caso. En el ejemplo se seleccionó 150 DPI y calidad promedio para ahorrar algo de espacio al tiempo que no se ve tan mal una vez impreso.
Debemos notar que convert no cambia la relación de aspecto de manera predeterminada con la operación resize:
Resize encajará la imágen en el tamaño requerido. Aunque NO rellena el tamaño de caja.
Manual de ImageMagick: http://www.imagemagick.org/Usage/resize/#resize
Dependiendo de la versión de ImageMagick y el formato de entrada involucrado se podría omitir la opción -repage. Pero algunas veces se requiere y sin esa opción el encabezado del PDF podría contener dimensiones muy pequeñas. En cualquier caso, -repage no debería molestar.
El cómputo usa aritmética de enteros ya que bash soporta eso solamente. Con zsh las expresiones pueden ser simplificadas – ej. $((i*8.27))x$((i*11.69)).