La navaja suiza del PDF

Tal como conté en un artículo anterior, el formato PDF fue concebido para poder presentar e intercambiar documentos de forma fiable, con independencia del software, el hardware o el sistema operativo. Es un formato abierto, estándar y muy popular, que se utiliza desde hace años para presentar información en forma de documentos, libros o cualquier otro tipo de textos que necesiten ser visualizados por usuarios de sistemas heterogéneos. El hecho de ser un formato esecialmente orientado a la exposición de datos (en forma de texto, imágenes, gráficos, tablas, etc.) no lo hace especialmente propenso a la edición y modificación de los mismos 1, lo cual no impide que sea factible realizar otras operaciones que permitan reestructurar el contenido o cambiar el aspecto de las páginas de un documento.

En GNU/Linux disponemos de una herramienta multiusos que nos proporciona la facultad de realizar tales operaciones con cierta facilidad. Se trata del comando PDFtk, el cual, a través de un conjunto de argumentos y opciones, hace posible la manipulación de las páginas de cualquier fichero PDF. Vamos a realizar un repaso de las capacidades que ofrece PDFtk mediante un variado surtido de ejemplos, en los que intentaré reflejar los escenarios más probables que pueden darse a la hora de tener que modificar uno o varios PDFs.

Pero antes de meterme en faena quisiera ilustrar las distintas maneras que existen de proteger un documento PDF con el fin de limitar el acceso al mismo. Cuando se genera un documento PDF desde cualquier aplicación (el Writer de LibreOffice, por ejemplo) es posible encriptarlo con dos contraseñas distintas para configurar sendos tipos de protección:

  • La contraseña del propietario (owner password) protege al documento de cualquier acceso no autorizado que intente realizar algún tipo de modificación sobre el contenido del mismo a través de una aplicación concreta. Mediante esta contraseña, el fichero PDF solo se podrá abrir para su posterior lectura.
  • La contraseña del usuario (user password) produce los mismos efectos que la del propietario, con la salvedad de que tampoco permite la lectura del documento si no se conoce dicha contraseña.

Ahora sí, vamos a ver unos cuantos ejemplos que intenten esclarecer el modo de operar de este comando. No sin antes aclarar que, para poder ejecutarlo, es imprescindible instalar el paquete pdftk, el cual suele encontrarse en la mayoría de los repositorios oficiales:

$ sudo aptitude install pdftk

Ejemplos didácticos

  1. Una de las operaciones más básicas que suele realizarse es la unión de dos o más ficheros PDF en uno solo. O sea, concatenarlos en un orden determinado para obtener un nuevo fichero que incluya, en un único documento, sus contenidos. Supongamos que disponemos de tres ficheros llamados doc1.pdf, doc2.pdf y doc3.pdf, y queremos unirlos en un documento que englobe a los tres, y en ese mismo orden (1, 2 y 3):
    $ pdftk A=doc1.pdf B=doc2.pdf C=doc3.pdf cat A B C output doc-unido.pdf
    

    El orden quedará establecido por la secuencia de letras que hayamos establecido en el argumento cat, en este caso A B C, que son los manejadores de los ficheros de entrada.
    Otra manera más rápida de hacerlo es mediante el uso de comodines:

    $ pdftk *.pdf cat output doc-unido.pdf
    

    El orden de concatenación será el mismo que se muestra al listar tales ficheros:

    $ ls *pdf
    doc1.pdf  doc2.pdf  doc3.pdf
    

    También se pueden especificar los nombres de cada uno de los ficheros:

    $ pdftk doc1.pdf doc2.pdf doc3.pdf cat output doc-unido.pdf
    
  2. Otra operación que podemos hacer es invertir el orden de las páginas de un documento PDF:
    $ pdftk A=doc.pdf cat Aend-1 output doc-invertido.pdf
    

    Aplicando esta técnica a la operación anterior, podemos realizar la unión de varios ficheros de tal forma que uno de ellos muestre, en el documento resultante, sus páginas en orden inverso:

    $ pdftk A=doc1.pdf B=doc2.pdf C=doc3.pdf cat A Bend-1 C output doc-unido.pdf
    
  3. A veces escaneamos las páginas de un libro de forma que las impares acaban en un fichero PDF y las pares en otro distinto. En tal caso se precisa un procedimiento para mezclar las páginas de uno y otro fichero en un tercer PDF, de forma que las pares queden intercaladas entre las impares. Esto se puede hacer así:
    $ pdftk A=doc-pares.pdf B=doc-impares.pdf shuffle A B output doc-mezclado.pdf
    

    Tambiém podría ocurrir que uno de los documentos contenga las páginas en orden inverso y se necesite invertir el orden antes de ser mezclado. Supongamos que fuera el de las impares:

    $ pdftk A=doc-pares.pdf B=doc-impares.pdf shuffle A Bend-1 output doc-mezclado.pdf
    
  4. Otra situación típica es cuando deseamos eliminar una o varias páginas de un documento PDF. Supongamos que quiero eliminar las páginas 12, 13, 14 y 19 de un documento y mantener el resto de páginas:
    pdftk doc.pdf cat 1-11 15-18 20-end output doc-reducido.pdf
    

    Ahora lo haremos usando manejadores:

    $ pdftk A=doc.pdf cat A1-11 A15-18 A20-end output doc-reducido.pdf
    

    También es posible que queramos eliminar la última página sin saber cuantas páginas contiene el documento. Vamos a suponer que, además de la 12, 13, 14 y 19, quiero eliminar la última página:

    pdftk doc.pdf cat 1-11 15-18 20-r2 output doc-reducido.pdf
    

    Mediante el modificador r designaremos un número de página, que será localizado empezando a contar desde el final. Por tanto, la expresión 20-r2 se refiere a las páginas que van desde la número 20 hasta la segunda contando desde el final, o sea, hasta la penúltima, las cuales no serán borradas

  5. La operación inversa consistiría en extraer de un documento una serie de páginas determinadas (descartando las demás), para guardarlas en otro fichero PDF. Por ejemplo, vamos a extraer las páginas 12, 13, 14 y 19:
    pdftk doc.pdf cat 12-14 19 output doc-extraido.pdf
    

    O bien, mediante manejadores:

    $ pdftk A=doc.pdf cat A12-14 A19 output doc-extraido.pdf
    

    Al igual que antes, podría darse el caso de querer extraer, por ejemplo, la última página sin saber cuantas páginas contiene el documento, en tal caso volvemos a recurrir al prefijo r. Supongamos que queremos extraer las páginas 12, 13, 14, 19 y -para variar- la penúltima:

    pdftk doc.pdf cat 12-14 19 r2 output doc-extraido.pdf
    

    Una variante de esta operación es extraer todas las páginas del documento original, de tal forma que cada página se convierta en un fichero PDF independiente (de una sola página, obviamente). Para ello recurriremos a un nuevo argumento que permite hacer estallar (burst) el fichero de entrada:

    $ pdftk doc.pdf burst
    

    Conviene utilizar este argumento con cierta prevención, ya que si el documento de entrada contiene muchas páginas tardará un buen rato en completar la explosión.

  6. Una operación que puede ser necesaria en algunos casos es girar 90º (en sentido horario) alguna de las páginas del documento; normalmente la primera, que suele contener una portada en orientación vertical que, a veces, necesita ser mostrada en orientación horizontal:
    $ pdftk doc.pdf cat 1east 2-end output doc_pri-90.pdf
    

    Supongamos que queremos girar todas las páginas 180º (para que se vean boca abajo):

    $ pdftk doc.pdf cat 1-endsouth output doc-reves.pdf
    

    También podríamos querer girar la última -o cualquier- página 270º (aunque no tenga mucho sentido):

    $ pdftk doc.pdf cat 1-r2 endwest output doc_ult-270.pdf
    

    O girar 90º la pagina número 13 y 270º la antepenúltima página:

    $ pdftk doc.pdf cat 1-12 13east 14-r4 r3west r2-end output doc_13-90_u3-270.pdf
    
  7. Entramos en el apartado de la seguridad. El caso más simple es cifrar un documento PDF con una contraseña de propietario:
    $ pdftk doc.pdf owner_pw contraseña output doc_cifrado-prop.pdf
    

    O con una contraseña de usuario:

    $ pdftk doc.pdf user_pw contraseña output doc_cifrado-usuar.pdf
    

    O con ambas contraseñas:

    $ pdftk doc.pdf user_pw contraseña1 owner_pw contraseña2 output doc_cifrado-total.pdf
    

    Podríamos querer cifrarlo, pero concediendo permisos de impresión al documento resultante:

    $ pdftk doc.pdf owner_pw contraseña1 user_pw contraseña2 output doc_cifrado-total.pdf allow printing
    

    Más arriba expliqué que se podía explosionar un documento para generar un PDF por cada página. Pues bien, si queremos que cada uno de esos PDFs esté protegido por una contraseña de usuario y, además, se pueda imprimir en baja calidad, deberemos ejecutar lo siguiente:

    $ pdftk doc.pdf burst user_pw contraseña allow DegradedPrinting
    
  8. El caso contrario es cuando deseamos descifrar un fichero PDF protegido con alguna contraseña; por ejemplo, la de propietario:
    $ pdftk doc_cifrado-prop.pdf owner_pw contraseña output doc.pdf
    

    Puede sustituirse el argumento owner_pw por input_pw, ambos son análogos cuando se trata de la contraseña de propietario.
    Y si queremos eliminar la contraseña de usuario:

    $ pdftk doc_cifrado-usuar.pdf user_pw contraseña output doc.pdf
    
  9. Y, por último, si queremos unir varios ficheros PDF y uno de ellos está encriptado con alguna contraseña, ésta deberá ser especificada. Supongamos que el primer fichero PDF está protegido con una contraseña de propietario:
    $ pdftk A=doc-cifrado.pdf doc2.pdf input_pw A=contraseña cat output doc-unido.pdf
    

Notas finales

  • El uso de manejadores en PDFtk es útil (y recomendable) cuando estamos trabajando con varios ficheros de entrada, de esta forma será posible hacer referencia a cada uno de ellos y aplicar acciones sobre cada fichero por separado.
  • El argumento allow puede aplicarse en cualquier situación en la que estemos encriptando un fichero PDF, para establecer excepciones que permitan realizar acciones concretas sobre los documentos protegidos. Además de printing y DegradedPrinting se pueden aplicar otras acciones excepcionales.
  • Si ciframos un fichero PDF y, pasado el tiempo, se nos olvida la contraseña que elegimos para el cifrado, no será posible recuperarla mediante la utilidad PDFtk. En tal situación se hace necesario recurrir a otra herramienta que explicaré en otro artículo.

  1. Aunque existe, en casi todos los sistemas operativos, una colección de software orientado a la edición de documentos PDF, lo cual se puede conseguir, con más o menos acieerto, si el documento ha sido generado por una aplicación de edición de textos. 
Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s