Añadir nuevo comentario

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.