Categorías
General Miniguías

Convertir imagenes a PDF desde la línea de comandos

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)).

 

 

unix.stackexchange.com

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *