10 operaciones útiles con archivos PDF
Los ficheros PDF se han convertido prácticamente en el formato de documentos más extendido y cómodo.
Aunque las impresoras virtuales (y conversores PDF) han facilitado mucho las tareas de creación de documentos PDF, a veces se requiere un mayor grado de control sobre el archivo PDF, que facilite más posibilidades e incluso ofrezca la posibilidad de automatizar tareas para realizar sobre múltiples archivos.
The PDF Toolkit (a partir de ahora, Pdftk) es una utilidad con licencia GPL disponible para entornos Windows y Linux, que permite realizar tareas sobre archivos PDF desde una línea de comandos con un alto grado de control y posibilidades, como demostraré con las siguientes 10 operaciones útiles con archivos PDF:
1. Añadir páginas a un documento PDF existente
Es posible añadir (concatenar) páginas o documentos PDF a otros documentos PDF de una forma muy sencilla, utilizando la opción cat de Pdftk.
pdftk portada.pdf capitulo1.pdf capitulo2.pdf cat output libro.pdf
En este ejemplo, creamos un archivo libro.pdf que estará formado por la portada (portada.pdf) y los dos primeros capítulos (capitulo1.pdf y capitulo2.pdf).
2. Extraer solo las páginas impares de un documento
Es posible extraer las páginas impares de un documento haciendo uso del atributo odd (o even si buscamos las pares). Veamos con un ejemplo:
pdftk documento.pdf cat 1-15odd output paginas-impares.pdf
Este ejemplo extrae las páginas impares (odd) de las primeras 15 páginas (1-15) del archivo documento.pdf, guardándolas en paginas-impares.pdf.
3. Rotar páginas específicas de un documento PDF
Con Pdftk es posible rotar ciertas páginas de un documento PDF (o el documento íntegro, es decir, todas sus páginas). Para ello, sólo tenemos que añadir una letra que representará los grados de rotación:
- N: 0 grados (sin efecto, por defecto).
- E: 90 grados.
- S: 180 grados.
- W: 270 grados.
pdftk documento.pdf cat 1-endE output documento-rotado.pdf
En este ejemplo se rota el documento íntegro (1-end) realizando una rotación de 90 grados (E). Todo ello se guarda en documento-rotado.pdf.
4. Invertir el orden de paginas de un documento PDF
También es posible invertir o alterar el orden de páginas de un documento PDF. Para ello sólo hay que especificar el orden a seguir tras la opción cat, en este caso, creamos un documento con orden inverso.
pdftk documento.pdf cat end-1 output inverso.pdf
5. Separar PDF en páginas individuales
Esta opción separa el documento PDF, creando cada página en un documento individual. Puede ser útil para ser sometido a una ordenación manual posterior.
pdftk documento.pdf burst pagina_%02d.pdf
Esto creará varios archivos llamados pagina_01.pdf, pagina_02.pdf, pagina_03.pdf y así sucesivamente. Esto es así porque en %02d estamos indicando que se generen en formato pagina_XX.pdf. Si utilizaramos %04d lo haría con el formato pagina_XXXX.pdf.
6. Establecer una marca de agua en un documento PDF
Es posible indicar una página (se utilizaría siempre la primera del documento marcadeagua.pdf) que se utilice de marca de agua en el fondo de documento.pdf, guardándose en el fichero de salida documento-con-marcadeagua.pdf.
pdftk documento.pdf background marcadeagua.pdf output documento-con-marcadeagua.pdf
Si utilizamos la opción multibackground en lugar de background, en lugar de utilizar siempre la primera página a modo de marca de agua, se utilizará la página correspondiente (en la página 1, se utilizará la marca de agua de la página 1, en la página 2, la marca de agua de la página 2, y así sucesivamente).
7. Estampar una imagen al frente del documento
Del mismo modo que se puede establecer una marca de agua al fondo del documento, puede utilizarse de imagen solapada al frente del documento. Para ello usaremos la opción stamp en lugar de la anterior background.
pdftk documento.pdf stamp stamp.pdf output documento-final.pdf
Además, también tiene la opción análoga de utilizar multistamp con el mismo fin del apartado anterior.
8. Extraer metadatos de un PDF
Con la opción dump_data es posible extraer los metadatos de un documento PDF.
pdftk modelo.pdf dump_data
InfoKey: Creator
InfoValue: PScript5.dll Version 5.2.2
InfoKey: Title
InfoValue: Modelo-2011.doc
InfoKey: Author
InfoValue: Manz
InfoKey: Producer
InfoValue: GPL Ghostscript 8.15
InfoKey: ModDate
InfoValue: D:20110802001750
InfoKey: CreationDate
InfoValue: D:20110802001750
PdfID0: dddaf390803d32715f78627d2c1d2dc
PdfID1: dddaf390803d32715f78627d2c1d2dc
NumberOfPages: 1
Ademas existen varias opciones de la misma familia como dump_data_utf-8 para realizar la misma tarea con información con codificación UTF-8, o update_info para cambiar metadatos.
9. Reparar PDF corruptos o dañados
El parseador interno de Pdftk es capaz de procesar el documento PDF y reestructurar las tablas y flujos del archivo PDF y reparar archivos dañados o corruptos (siempre que sea posible). Para ello no hay más que escribir lo siguiente:
pdftk documento-corrupto.pdf output documento-reparado.pdf
10. Dividir o separar PDF compuestos por varias páginas
Por último, vamos a poner un ejemplo (un poco más avanzado) de la combinación de varias de estas tareas para realizar algo más complejo.
Tenemos un documento que incorpora varias páginas o diapositivas en una misma página del documento. Nuestra intención es separarlas y recomponer un documento PDF tradicional como se ve en la imagen. Para ello también haremos uso de GhostScript.
Parte 1
En primer lugar, utilizaremos el GhostScript (en mi caso he usado gswin64c porque dispongo de un equipo de 64 bits) para realizar la división de páginas:
gswin64c -f documento.pdf -sDEVICE=pdfwrite -g3750x9210 -c "<</PageOffset [0 0]>> setpagedevice" -o left-pages.pdf
Con este primer comando, indicamos a GhostScript el tamaño del documento (3750x9210), dividiendo las páginas de la izquierda y guardándolas en el documento left-pages.pdf (que serían las páginas impares).
La parte del desplazamiento (PageOffset) en este caso no está realizando ninguna acción, eso lo veremos ahora...
gswin64c -f documento.pdf -sDEVICE=pdfwrite -g3750x9210 -c "<</PageOffset [-430 0]>> setpagedevice" -o right-pages.pdf
Realizamos la tarea análoga con respecto a las páginas de la derecha (las páginas pares). Aquí si utilizamos un valor de desplazamiento -430, que moverá la región a recortar.
Parte 2
Llegados a este punto, tenemos dos documentos PDF, uno con las páginas impares y otro con las páginas pares. Sólo necesitaríamos unirlos en un mismo documento.
pdftk A=left-pages.pdf B=right-pages.pdf shuffle A B output documento-final.pdf
Para ello hemos utilizado la opción shuffle, que en lugar de concatenar como lo hace cat (documento íntegro A seguido del documento íntegro B), va haciéndolo página por página (página 1 de A, página 1 de B, página 2 de A, página 2 de B...).
En la documentación oficial de Pdftk pueden verse más opciones y funciones interesantes para utilizar con documentos PDF.