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.