La última vez que utilicé convertpara tal tarea, especifiqué explícitamente el tamaño del destino mediante el cambio de tamaño:
$ 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
El convertcomando no siempre usa DPI como unidad de densidad / formato de página predeterminada, por lo tanto, especificamos explícitamente DPI con la -unitsopción (de lo contrario, puede obtener resultados diferentes con diferentes versiones / combinaciones de formatos de entrada). El nuevo tamaño (especificado mediante -resize) es la dimensión de una página DIN A4 en píxeles. El argumento de cambio de tamaño especifica el tamaño máximo de página. Qué resolución y calidad elegir exactamente depende del caso de uso: seleccioné 150 DPI y calidad promedio para ahorrar algo de espacio mientras no se ve tan mal cuando se imprime en papel.
Tenga en cuenta que, convertpor defecto, no cambia la relación de aspecto con la operación de cambio de tamaño:
Cambiar el tamaño se ajustará a la imagen en el tamaño solicitado. NO llena, el tamaño de caja solicitado.
( Manual de ImageMagick )
Dependiendo de la versión de ImageMagick y los formatos de entrada involucrados, podría estar bien omitir la -repageopción. Pero a veces es obligatorio y sin esa opción, el encabezado del PDF podría contener dimensiones demasiado pequeñas. En cualquier caso, el -repageno debería doler.
Los cálculos usan aritmética de enteros ya que bashsolo es compatible con eso. Con zshlas expresiones se puede simplificar, es decir, reemplazar con $((i*8.27))x$((i*11.69)).
Lineart Images
Si los archivos PNG son imágenes de dos niveles (también conocido como lineart en blanco y negro), la img2pdfherramienta produce resultados superiores sobre ImageMagick convert. Eso significa que img2pdfes más rápido y produce archivos PDF más pequeños.
Ejemplo:
$ img2pdf -o multipage.pdf a.png b.png
o:
$ img2pdf --pagesize A4 -o multipage.pdf a.png b.png
-repage a4obtengo uninvalid argument for option '-repage': a4