Concatenando PDFs en güindous

En la universidad tenemos un scanner maravilloso que es capaz de recibir un taco de folios y generarte un PDF con ellos. Solo tiene un pequeño problemilla: si las hojas están escritas a doble cara no les da la vuelta.

En secretaría de vicerrectorado me han pedido un programa que sea capaz de intercalar los PDFs con la pares y las impares generando uno solo.

Datos de entrada: dos PDFs de 70 páginas, uno con la páginas impares y otro con las páginas pares.
Datos de salida: un solo PDF con 140 páginas intercaladas.

La solución inicial consiste en dividir ambos en imágenes y luego intercalarlas:

mkdir tmp
cd tmp
pdftoppm ../impares.pdf impares
pdftoppm ../pares.pdf pares
for i in `ls *.ppm`; do pnmtops $i > $i.ps; rm $i; done
ls *.ppm.ps | awk 'BEGIN {FS="-"} 1 {system ("mv "$0" "$2$1)}'
ls | sort --numeric-sort | awk '1 {parametros = parametros" "$0} END {system ("psmerge -osalida.ps " parametros)}'
ps2pdf salida.ps ../salida.pdf
cd ..
rm -r tmp

Lo que pasa es que así tarda mucho al hacer el paso a imagen y luego deshacerlo así que intento no pasar por imagen:

mkdir tmp
cd tmp
paginas=`pdfinfo ../pares.pdf | grep ages | awk '{print $2}'`
pdf2ps ../pares.pdf pares.ps
for i in `seq 1 $paginas`; do psselect -p$i pares.ps $i.pares.ps; done
rm pares.ps
paginas=`pdfinfo ../impares.pdf | grep ages | awk '{print $2}'`
pdf2ps ../impares.pdf impares.ps
for i in `seq 1 $paginas`; do psselect -p$i impares.ps $i.impares.ps; done
rm impares.ps
ls | sort --numeric-sort | awk '1 {parametros = parametros" "$0} END {system ("psmerge -osalida.ps " parametros)}'
ps2pdf salida.ps ../salida.pdf
cd ..
rm -r tmp

Casi perfecto ... pero ahora lo abro con el evince y me doy cuenta de que no puedo seleccionar el texto.

Sigo mareando y llego a un código que me permite mantenerme siempre en pdf, que al final siempre es el más sencillo:

mkdir tmp
cd tmp


mkdir impares
cd impares
pdftk ../../impares.pdf burst
for i in `ls *.pdf`; do cp $i ../$i.impares.pdf; done
cd ..
rm -r impares


mkdir pares
cd pares
pdftk ../../pares.pdf burst
for i in `ls *.pdf`; do cp $i ../$i.pares.pdf; done
cd ..
rm -r pares


ls | sort | awk '1 {parametros = parametros" "$0} END {system ("pdfjoin --outfile ../salida.pdf " parametros)}'
cd ..
rm -r tmp

Y que afinándolo queda como sigue:

mkdir tmp
cd tmp


for pagina in impares pares; do
mkdir $pagina
cd $pagina
pdftk ../../$pagina.pdf burst
for i in `ls *.pdf`; do cp $i ../$i.$pagina.pdf; done
cd ..
rm -r $pagina
done


ls | sort | awk '1 {parametros = parametros" "$0} END {system ("pdfjoin --outfile ../salida.pdf " parametros)}'
cd ..
rm -r tmp

Y ahora lo más difícil, borrar el güindous de la secretaria e instalarle linux ... puesvaaserquenó.

Ahora la solución windows, que me ha llevado más tiempo que la anterior y es bastante más coñazo.

Primero probé con el omnipresente pdfcreator ... con muy malos resultados ya que se me colgaba constantemente.

Nos vamos a sourceforge y buscamos la palabra "pdf". Después de media hora buscando programas me encuentro con uno que me puede servir y se llama PDF Split and Merge o pdfsam para los amigos.

Me lo bajo al güindous y veo que tiene tres solapas: Merge, Split y Settings.

Además, en la de Split me permite "Romper en páginas individuales".

El proceso tiene que ser: romper en páginas individuales las pares y las impares para luego juntarlas todas en un solo documento.

Primero me bajo el openoffice para windows y me genero un PDF para las páginas pares y otro para las páginas impares.

Vamos a la solapa "Split", elegimos el fichero de pares, decimos que queremos separar todas las páginas, el directorio de destino y le damos a ejecutar.

Y lo mismo con el fichero de impares.

Ahora que ya las tenemos separadas vamos a la solapa de merge, pulsamos en el botón de "Añadir" seleccionamos todas las páginas pinchando sobre la primera, y luego sobre la última con el botón de ctrl pulsado:

y le damos a ejecutar.

Y ya tá lo que queremos en salida.pdf .

Hago un vídeo y lo cuelgo aquí para que quede más claro.

Comentarios

BASH mola

Igualito, lo poco que se tarda en BASH que lo que se tarda con la chusta de programa ese :-)

no has probado ponerles un cygwin? o casi mas chulo, hacer una mini aplicacion que envie el fichero a una maquina linux, esta haga el curro y lo devuelva...hasta via web se podria hacer en 2 nanosegundos.

Pero claro eso implicaria mas productividad y no siempre es lo que se busca :-D

Si, BASH mola, pero python mas

Tienes razón, bash es como el vi: al principio lo odias pero luego no sabes como vivir sin el. ;-)

La verdad es que al principio pensé hacer un gui tonto en glade como este

Y luego usar py2exe para convertirlo en un ejecutable, pero por una mala experiencia se que lo que se hace para linux con python y glade necesita retoques en windows para funcionar bien.

Lo de la página web también lo pensé, pero instalarle un apache a la secre ... pues como que no y en mi PC personal que lo apago y lo enciendo ... pues como que tampoco.

¿cygwin? Creo que no está entre el vocabulario de las secretarias. De hecho ni siquiera lo está entre muchos "informáticos". ;-)

Por eso al final miré en sourceforge que al final va a ser código tan libre como el que pueda hacer yo.
La verdad es que pensaba haberlo mirado desde el principio pero quería saber como se podía hacer en linux.

¡¡Be free my friend!!