La última vez que utilicé convert
para 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 convert
comando no siempre usa DPI como unidad de densidad / formato de página predeterminada, por lo tanto, especificamos explícitamente DPI con la -units
opció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, convert
por 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 -repage
opció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 -repage
no debería doler.
Los cálculos usan aritmética de enteros ya que bash
solo es compatible con eso. Con zsh
las 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 img2pdf
herramienta produce resultados superiores sobre ImageMagick convert
. Eso significa que img2pdf
es 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 a4
obtengo uninvalid argument for option '-repage': a4