Hoy en día los documentos PDF están a la orden del día: los apuntes de la universidad, documentación de proyectos en el trabajo, distribución de ebooks, etc. Gracias a su versatilidad, la seguridad y el mantenimiento del formato con independencia de las plataformas son el tipo de documento más utilizado cuando se trata de información textual con o sin imágenes, gráficos, tablas de datos, etc. Sin embargo, el PDF no es un documento fácil de modificar, lo cual hace que en algunas ocasiones nos complique la vida.
PDFtk (PDF toolkit) es un completo editor de PDF de código abierto y multiplataforma. Entre sus funciones están: dividir, combinar, cifrar, descifrar, descomprimir, recomprimir y reparar documentos PDF. También permite manipular marcas de agua, metadatos, rellenar formularios PDF con datos FDF (Form Data Format) o XFDF (XML Form Data Format). Además está disponible para la línea de comandos, permitiendo la creación de scripts, y con interfaz gráfico para los usuarios menos avanzados.
Vamos a ir viendo con detalle cómo se realizan las diferentes labores de manipulación de los documentos. Para ello lo primero es descargar e instalar pdftk desde aquí para Windows, o en Linux ejecutando en la terminal:
$ sudo apt-get install pdftk
En caso de no tener los repositorios adecuados (Ubuntu los tiene sin problemas) o de no utilizar el gestor de paquetes apt-get, podemos buscar los ficheros fuente y compilarlos, pero éste tema lo explicaré otro día.
Una vez instalado tendremos el acceso a todos los comandos de terminal, la información de ayuda y ejemplos de uso mediante:
$ man pdftk
A pesar de ello, para algunas personas puede resultar un poco liosa la consulta te éste manual, por lo que trataré de explicarlo aquí de un modo lo más simplemente posible.
Unir documentos:
Se puede unir cualquier número de archivos PDF:
$ pdftk <doc1.pdf> <doc2.pdf> cat output <doc1y2.pdf>
Unir todos los archivos pdf de un directorio:
$ pdftk *.pdf cat output <docFinal.pdf>
También es posible etiquetar los archivos PDF que se van a unir:
$ pdftk A=<doc1.pdf> B=<doc2.pdf> cat A B output <doc1y2.pdf>
Si queremos mezclar dos documentos escaneados por páginas pares e impares:
$ pdftk A=<pares.pdf> B=<impares.pdf> shuffle A B output collated.pdf
Girar páginas de un documento:
Girar la primera página 90 grados en el sentido de las agujas del reloj:
$ pdftk <doc.pdf> cat 1E 2-end output <docSalida.pdf>
Girar todas las páginas de un documento 180 grados:
$ pdftk <doc.pdf> cat 1-endS output <docSalida.pdf>
Observar lo que viene después de ‘cat’: Se seleccionan las páginas que se quieren girar y se da un punto cardinal: E, O, S. Consideramos: E(este)=derecha, O(oeste)=izquierda, S(sur)=abajo (página invertida). Así pues E y O significa girar 90º en la dirección indicada, y S girar la página 180º. También se acepta seleccionar la acción de las siguientes formas: north, south, east, west, left, right, or down. Además, dentro del intervalo seleccionado, se puede seleccionar solo las páginas pare o las impares: even o odd respectivamente. Para que el documento salga completo, debemos seleccionar las páginas que no se van a girar sin darle ningún punto cardinal. Es fácil descubrir que ésta característica se puede aprovechar para cambiar de orden las páginas de un documento. Por ejemplo en un documento de 12 páginas:
$ pdftk <doc.pdf> cat 1-4 12 5-11 output <docSalida.pdf>
también se puede utilizar, bajo la misma lógica, para restar páginas a un documento. Por ejemplo, para quitar a un documento las páginas 5 y 6:
$ pdftk <doc.pdf> cat 1-4 7-end output <docSalida.pdf>
Como se observa, se pueden hacer las combinaciones que se quieran, y las posibilidades son muy grandes.
Extraer páginas:
Extraer las páginas 4 a 6 de un documento a otro nuevo:
$ pdftk A=<doc1.pdf> cat A4-6 output <docSalida.pdf>
Extraer páginas 4 a 6 de un documento y la página 2 de otro en un nuevo documento:
$ pdftk A=<doc1.pdf> B=<doc2.pdf> cat A4-6 B2 output <docSalida.pdf>
Extraer todas las páginas de un documento en documentos separados:
$ pdftk <doc1.pdf> burst
esto creará archivos de nombre: pg_001.pdf, pg_002.pdf, etc.
Cifrado de documentos:
Cifrar un pdf a 128 bits controlando los permisos (por defecto):
$ pdftk <doc1.pdf> output <doc128cifrado.pdf> owner_pw foopass
Cifrado a 128 bits que requiere una contraseña:
$ pdftk <doc1.pdf> output <doc128cifrado.pdf> owner_pw foopass user_pw <password>
Cifrado a 128 bits con contraseña y permitiendo la impresión:
$ pdftk <doc1.pdf> output <doc128cifrado.pdf> owner_pw foopass user_pw <password> allow printing
Cifrado a 128 bits con contraseña y permitiendo copiar la información:
$ pftk <doc1.pdf> output <doc128cifrado.pdf> owner_pw foo allow copycontents
los dos anteriores se pueden combinar para permitir la copia y la impresión.
Descifrar documentos:
Descifrado de un PDF:
$ pdftk <docSeguro.pdf> input_pw foopass output <docFinal.pdf>
Juntar dos pdf teniendo un cifrado (la salida estará sin cifrar):
$ pdftk A=<docSeguro.pdf> <doc.pdf> input_pw A=foopass cat output <docFinal.pdf>
Descomprimir documentos:
$ pdftk <doc.pdf> output <docDescomp.pdf> uncompress
Esto es útil para poder editar el documento con un editor de texto como pude ser vim, emacs, o cualquier otro en entrono gráfico.
Una vez editado lo volvemos a comprimir:
$ pdftk <doc.pdf> output <docComprimido.pdf> compress
Reparar un documento:
Intenta reparar un PDF corrupto (si es posible) reparando las tablas XREF y las longitudes de steams:
$ pdftk <docCorrupto.pdf> output <docReparado.pdf>
Marcado y metadatos de un documento:
Si queremos añadir una marca de agua a un documento:
$ pdftk <doc.pdf> background <marca.pdf> output <salida.pdf>
Se toma el documento <marca.pdf> como fondo del documento <doc.pdf>. Tener en cuenta que solo se utiliza la primera página de documento <marca.pdf>. Si en lugar de añadir una marca de agua de fondo del documento deseamos estampar una imagen solapada sobre el contenido del documento utilizamos la orden stamp en lugar de background.
Obtener los metadatos y demás información sobre un pdf en un informe:
$ pdftk <doc.pdf> dump_data output <metadata.info>
se puede omitir la orden output y el nombre del fichero para que lo saque con un nombre por defecto.
Para añadir/editar los metadatos y los marcadores de un documento pdf:
$pdftk <doc.pdf> update_info <metadata.info> output <salida.pdf>
En el archivo <metadata.info> tenemos contenidos los valores de los metadatos en el siguiente formato:
InfoKey: Title InfoValue: <Título> InfoKey: Subject InfoValue: <Asunto> InfoKey: Keywords InfoValue: <palabras clave separadas por comas> InfoKey: Author InfoValue: <Autor del documento> InfoKey: Creator InfoValue: <Editor con que se ha creado el documento> InfoKey: Producer InfoValue: pdftk InfoKey: CreationDate InfoValue: <fecha de creación del PDF> PdfID0: <primer id del PDF> PdfID1: <segundo id del PDF> NumberOfPages: 116
El archivo de salida/entrada de estos dos últimos comandos está codificado en ascii, y los caracteres que no estén en la tabla ascii han de codificarse como entidades numéricas de XML. Otra opción es usar dump_data_utf8 y update_info_utf8 respectivamente, de éste modo indicamos que se codifique en UTF-8.
Formularios de datos en PDF (FDF)
Generar un archivo FDF en blanco:
$ pdftk <doc.pdf> generate_fdf output <salida.fdf>
Rellenar un PDF con datos FDF y marcar los datos como no editables (flatten):
$ pdftk <formulario.pdf> fill_form <datos.fdf> output <salida.pdf> flatten
Se puede saber más sobre el formato FDF aquí <http://www.gnupdf.org/Forms_Data_Format>, aunque quizás más adelante habla acerca de éste formato con sus grandes posibilidades añadidas.
Una interfaz gráfica
Para aquellos que prefieren trabajar en modo gráfico (con todas las ventajas y desventajas que esto trae), existe una herramienta que permite no tener que entrar en la terminal, aunque tiene un coste de $3,99. Podéis comprarla aquí.
Ésta herramienta sólo tiene sentido en Linux, ya que en Windows se instala directamente la interfaz gráfica.
Espero que este artículo resulte útil tanto para lectores avanzados que necesiten una referencia para recordar comandos como para los noveles que necesiten hacer algunas modificaciones básicas en sus documentos. Cabe decir que PDFtk tiene bastantes opciones más aparte de las escritas aquí, pero en éste artículo se pueden encontrar la mayoría de las más utilizadas. Para ver todas las opciones ir a la página del manual de Linux ($man pdftk
) o a ésta web donde está la copia del mismo.
El artículo PDFTK, un editor de PDF libre apareció por primera vez en Instinto Binario.