Solución al reto de paginación de un PDF

Bueno, muchas de las respuestas aportadas son correctas y muy interesantes: iText, uso de opción multibackground con pdftk, o el script para pdfcreator. De hecho mi propuesta se parece a esta última pero funciona también en Linux 🙂 Se basa en usar pdfedit y su soporte de scripting, ejecutando el siguiente script tal y como figura en la imagen adjunta:

for (i=1; i <= document.getPageCount(); i++)
 {
   addText(300,745,300,745,765,711);
   text = tr("%1".arg(i));
   _AddTextSlot(text);
    PageSpace.nextPage();
}
    go();

Los números de addText son coordenadas x,y de la esquina superior izquierda e inferior derecha del rectángulo que envolverá al texto (repetidas las primeras, no sé aún por qué pdfedit lo requiere así…)
La función _AddSlot se supone por la nomenclatura (empieza por _) que es privada, pero el lenguaje no la oculta 😛 . La función tr simula un printf (para conseguir un casting de número -en la variable i- a String)
go() recarga la página del PDF (si no la ejecutas parece que hay algún error de refresco de pantalla, porque el número mostrado no es el que realmente se ha añadido en la página).

Espero que os haya gustado el reto y las distintas soluciones. Incluso os será útil 😛

Un reto relacionado con la edición de PDF’s

Me gustan los retos informáticos. Los que seguís este blog lo sabréis, y seguramente habréis disfrutado como yo con retos como el HackIt, HackIt2 y HackIt3. Pero no sólo de HackIts vive el hombre (ya podría ser!) 🙂 Así que, hoy traigo un reto más mundano: tenemos un PDF sin números de página (las hojas no están paginadas, vaya). El reto consiste en añadirle a cada página su número (1, 2, 3… etc.). Repito: es un PDF (no tengo el documento original a partir del cuál se creó). Y no quiero añadir los números a mano, claro, porque podría eternizarme 😉 Quiero que el ordenador trabaje por mí, y por supuesto, sólo se admiten soluciones basadas en software libre. ¿Te animas a superar el reto? Mañana (día 3 de Marzo), postearé la solución, pero mientras, ¡espero vuestras aportaciones! 😉

Tip: extraer las imágenes de un PDF

Problema: tienes un PDF con alguna imagen que quieres extraer del mismo. Por ejemplo, tienes el logotipo de alguna entidad que te interesa usar en otro documento (y no lo encuentras en la web :-O )
Solución:

 
$ pdfimages elfichero.pdf logo

El segundo parámetro indica el prefijo con el que se grabarán todas las imágenes del fichero PDF. Por ejemplo, si en el fichero PDF hubiera 2 imágenes, tras ejecutar la orden anterior tendríamos en el directorio actual las imágenes logo-00.ppm y logo-01.ppm.
Nota1: como efecto lateral, acabo de ver que el fichero PDF ocupaba 10 MB porque el logo de la entidad era una imagen de grandes proporciones, con una resolución asombrosa, a la que se le ha hecho resize en el .DOC original…
Nota2: el binario pdfimages pertenece al paquete poppler-utils

Cambiar el fondo de un PDF

Truco enviado por el profesor Gorka Prieto a la lista ITSAS:

Por si a alguien más le ha pasado que tiene que imprimir un PDF con fondo
oscuro (estos profes que dan las transparencias con cualquier formato … ;P)
y quiere ponerle un fondo blanco:

$ convert -density 300 input.pdf -fill "rgb(255,255,255)" -opaque
"rgb(29,5,114)" output.pdf

Chrome y la visualización de PDFs en Linux

¿Qué es lo que os ocurre al pinchar sobre un enlace que lleva a abrir un PDF en Chrome/Chromium? Que en lugar de abrirse el PDF incrustado se abre una bonita pantalla negra como la de la imagen de la izquierda. Esto se puede evitar de dos formas. La primera: botón derecho, «Save Link as…». Pero claro, es una solución a posteriori (muchas veces no sabes que vas a pinchar sobre un enlace a un PDF hasta que pulsas el enlace y ves las consecuencias). La segunda opción: usar Mozplugger. Pero no la versión oficial, sino una versión parcheada disponible en el repositorio PPA http://ppa.launchpad.net/setack/stuff/ubuntu .

Para instalar ese nuevo repo, abrimos System/Administration/Synaptic y elegimos Settings/Repositories. En la pestaña «Other Software», pulsamos «Add..» y tecleamos el nombre del repositorio PPA indicado.

Si es necesario, importamos las claves GPG en nuestro llavero de claves APT :

$ gpg --keyserver keyserver.ubuntu.com --recv 60FD0E97
$ gpg --export --armor 60FD0E97 | sudo apt-key add -

Pulsamos ahora el botón Reload:



Descargamos el código fuente de Mozplugger+parche, compilamos e instalamos:

$ apt-get source mozplugger
$ cd mozplugger-1.13.0/
$ make
$ sudo make install

Ya queda menos… sólo configurar mozplugger:

$ gksudo gedit /etc/mozpluggerrc

Para que debajo de esta línea:

text/x-pdf:pdf:PDF file

aparezca:

repeat noisy swallow(evince) fill: evince «$file»

¡Presto! Vamos a probar. Abrimos Chrome y tecleamos en la URL:

about:plugins

Debe de aparecer Mozplugger y… NO debe de aparecer Adobe Acrobat Reader Plugin. Si éste último apareciera, buscar nppdf y quitarlo de la carpeta de plugins. En mi caso:

$ sudo mv /home/juanan/.mozilla/plugins/nppdf.so /tmp

Nota: Chrome reutiliza los plugins de Firefox, y éste a su vez los disponibles en la la carpeta .mozilla. Y en lugar de borrarlo he optado por moverlo a /tmp hasta probar que el experimento funciona 😉

Ahora, cerramos el navegador y por fin, abrimos Chrome, buscamos un PDF y debemos de verlo incrustado en pantalla (gracias a Evince).