Cómo generar un folleto a partir de un PDF desde Ubuntu Server


A veces necesito imprimir un documento PDF en forma de folleto, es decir, a dos páginas por hoja, doble cara y que el resultado final se pueda doblar en forma de libro y grapar o coser por la línea doblada. Se ahorra papel, el resultado es más manejable y es especialmente útil si tu impresora tiene función de doble cara.

Algunos programas con interface de usuario gráfica disponen de esta función de imprimir como folleto o libro, también conocida como ‘booklet’. Sin embargo, en Mac OS X son de pago todos son de pago y los gratuítos para Windows limitan el número de páginas o dejan una marca de agua.

Así que investigando las opciones disponibles sobre un Ubuntu Server 12.04 LTS x64, descubro que existen las utilidades PSUtils para la manipulación de documentos PostSctript mediante línea de comandos:

# apt-get install psutils

A continuación os describo los pasos para convertir un PDF a formato folleto o libro.

Paso 1: Convertir el pdf original a PostScript Level 3
pdftops -level3 source.pdf step1_source.pdf

Paso 2: Reordernar las páginas en forma de libro agrupadas por pliegos

Un pliego es el grupo de páginas que se cosen juntas. El comando

psbook [-sX] infile outfile

dispone del parámetro opcional -s (por defecto -s4) que determina el tamaño del pliego como múltiplo de 4 redondeado al alza. Por ejemplo para un libro de 38 páginas indicar -s40:

psbook -s40 step1_source.pdf step2_reordered.ps

Paso 3: Agrupar dos páginas en una, por lo general dos A5 en un A4:
psnup -2 step2_reordered.ps step3_twoPagesPerPage.ps

Paso 4: Convertir el PostScript resultante a PDF
ps2pdf step3_twoPagesPerPage.ps step4_booklet.pdf

Por fin, podemos ejecutar los 4 comandos seguidos y verificar cada paso intermedio hasta el resultado final:

pdftops -level3 source.pdf step1_source.pdf
psbook -s40 step1_source.pdf step2_reordered.ps
psnup -2 step2_reordered.ps step3_twoPagesPerPage.ps
ps2pdf step3_twoPagesPerPage.ps step4_booklet.pdf

Lo potente de todo esto es cuando aplicamos las viejas lecciones de IO de Unix. Si encadenamos la salida de cada comando sobre la entrada del siguiente utilizando pipes (las famosas tuberías) obtendremos el resultado mediente un único comando. es importante respetar la ausencia de espacios tras los pipes

pdftops -level3 source.pdf - |psbook -s40|psnup -2|ps2pdf - booklet.pdf

¡Voilá!