Creando un fichero PDF a partir de varias imágenes

Hoy he tenido que montar un fichero PDF con páginas escaneadas de diferentes fuentes. Muchos programas de escaneo permiten crear directamente un único fichero PDF con las diferentes sesiones y páginas capturadas, pero éste no había sido el caso. Me habían pasado una carpeta con 103 ficheros en formato JPG.

Bueno, al menos el reto estaba claro: convertir uno a uno estos ficheros en PDF y luego unirlos. Bueno, un momento ¿porqué en este orden? Porque yo ya conocía la herramienta para unir varios PDF en uno: pdftk.

El caso es que abrí una terminal en mi Linux y pensé ¿cómo convierto de JPG a PDF?. Una búsqueda rápida en Synaptic me llevó a sam2p, un pequeño programa que convierte cualquier fichero en formato Raster (Bitmap) a PDF. Por ejemplo, convierte GIF, JPG/JPEG, y PNG a PDF y a PS (PostScript). Pero claro, convertir uno a uno…

Para eso se inventaron los bucles for. Un bucle for de la bash nos permite, entre otras cosas, iterar por una lista de ficheros aplicando la misma acción a los diferentes ficheros. Así, que, si vamos al grano bastará con hacer:

 for f in `ls *.jpg`;do  sam2p $f PDF: $f.pdf ; done

Esto recorre todos los ficheros que aparecen como resultado de hacer un ls *.jpg. En cada iteración la variable f toma el valor de uno de los nombres de fichero. Así que llamamos a sam2p, que convierte los JPG en PDF.

pdftk *.pdf cat output resultado.pdf

Y una vez que tenemos múltiples ficheros PDF, pdftk los une en uno llamado resultado.

j j j

Estructura del if en la bash

if list; then list; [ elif list; then list; ] ... [ else list; ] fi

The if list is executed. If its exit status is zero, the then
list is executed. Otherwise, each elif list is executed in
turn, and if its exit status is zero, the corresponding then
list is executed and the command completes. Otherwise, the else
list is executed, if present. The exit status is the exit sta-
tus of the last command executed, or zero if no condition tested
true.

j j j

Crear un servicio personalizado

A veces es deseable disponer de un servicio personalizado en /etc/init.dAl crear el nuevo servicio (borra-tmp) aparece en la lista de services-admin

El método más rápido consiste en copiar un script de los que tengamos en /etc/init.d y retocarlo a nuestro gusto. Aparecerá en la herramienta Servicios (menú Sistema, aunque podemos llamarla desde consola con services-admin)

Por ejemplo, un servicio que borre el tmp mediante la orden /etc/init.d/borra-tmp start puede ser:

#!/bin/sh
set -e
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
usage () {cat << END$initd options:

start

Borra la carpeta tmp

clear

no usado

END

}
case "$1" instart)rm -r /tmp/*

;;

clear)
;;*)if test "$@"; then

echo "Aborting iptables initd: unknown command(s): \"$@\"."

fi

usage

;;

esac
exit 0
j j j