martes, 2 de febrero de 2010

Pdftk, utilidades para archivos PDF


Actualmente nadie discute la relevancia que han tomado los archivos PDF, tanta que han llegado a convertirse en un estándar ISO.

Dentro de las acciones que normalmente quieren realizarse sobre este tipo de archivos, destaca la de unir varios archivos en uno solo (por ejemplo para imprimirlos de manera más cómoda). Tras preguntarle a Google sobre esta cuestión, me encuentro con Pdftk, un conjunto de herramientas para GNU/Linux que nos permite llevar a cabo diferentes acciones sobre archivos PDF. Además de unirlos Pdftk es capaz de realizar, entre otras, las siguientes operaciones :




  • Extraer páginas

  • Rotar páginas

  • Cifrar/Descifrar archivos (se requiere contraseña)
  • Rellenar formularios PDF con datos FDF/XFDF o formularios en "texto plano"

  • Introducir una marca de agua o sello

  • Actualizar metadatos

  • Incluir archivos

  • Reparar archivos corruptos


Esta herramienta se encuentra en los repositorios de Ubuntu/Debian, por lo que puede instalarse mediante Synaptic o mediante la orden:

apt-get install pdftk

Un inconveniente menor es no se dispone de interfaz de usuario, por lo que las órdenes deben introducirse en la consola. Así, por ejemplo, si se quieren unir varios archivos PDF en uno solo, deberá emplearse el siguiente comando:

pdftk archivo1.pdf archivo2.pdf cat output nuevo.pdf

Para los que aún no han dado el salto a GNU/Linux y siguen utilizando Windows está disponible PDFCreator.

7 comentarios:

  1. Sí, pdftk es una gran herramienta, ya lo comentamos anteriormente en otra entrada (http://ingenium-liber.blogspot.com/2009/11/pequenos-grandes-programitas-libres.html). Otro ejemplo de comando del pdftk muy útil es para cuando quieres extraer unas páginas determinadas de un pdf, como en este ejemplo:

    pdftk archivogrande.pdf cat 5-7 output archivopeque.pdf

    Y como alternativa al pdftk para windows más que el pdfcreator que sería la alternativa al wkhtmltopdf que comentamos aquí (http://ingenium-liber.blogspot.com/2010/01/mi-primer-script.html), recomendaría el pdfsam, que está en la dire primera ;).

    ResponderEliminar
  2. PDFTK es un grandísimo programa, pero tiene sus limitaciones. A la hora de crear marcas de agua, depende de cómo se ha creado el pdf. Es decir, si el documento ha sido escaneado y pasado a PDF, la marca de agua sobreescribe el área que ocupa... aunque si estoy equivocado y hay alguna otra forma de hacerlo, soy todo oídos. :) Saludos!
    Alex

    ResponderEliminar
  3. Hola anónimo, gracias por comentar.

    Para solucionar tu problema me he dado una vuelta por la propia web del pdftk (http://www.accesspdf.com/pdftk/), en donde nos dice lo siguiente:

    «background
    Applies a PDF watermark to the background of a single input
    PDF. Pass the background PDF's filename after background
    like so:

    pdftk in.pdf background back.pdf output out.pdf

    Pdftk uses only the first page from the background PDF and
    applies it to every page of the input PDF. This page is
    scaled and rotated as needed to fit the input page. You can
    use - to pass a background PDF into pdftk via stdin.

    If the input PDF does not have a transparent background (such
    as a PDF created from page scans) then the resulting back-
    ground won't be visible -- use the stamp feature instead.

    stamp
    This behaves just like the background feature except it over-
    lays the stamp PDF page on top of the input PDF document's
    pages. This works best if the stamp PDF page has a transpar-
    ent background.»

    Por lo que te recomiendo que pruebes con «stamp» a ver si te funciona bien y nos cuentas (no tengo escaner, con lo que no lo he probado...).

    ResponderEliminar
  4. Hola Tejhon, soy Alex (el anónimo de antes ;)).

    Las marcas de agua las he estado realizando siempre con stamp, y es ahí donde me ha surgido el problema al aplicarlo sobre documentos escaneados, lo mismo que con la opción background.

    Ahora estoy probando con un OCR gratuito. Voy a ver cómo funciona el OCR en sí y luego miro a ver cómo funciona con el stamp. Lo pruebo en estos días y os comento (quizá no antes del lunes, que mi semana laboral termina hoy).

    Un saludo!

    ResponderEliminar
  5. Ah, olvidé decir algo importante: la marca de agua, al visualizarlo en pantalla, se crea perfectamente. Es al imprimir cuando el texto se "desordena". Me han comentado que no es un problema del PDFTK, sino que al ser un documento escaneado, es imposible lograr lo que pretendo. En cualquier caso, seguiré investigando...

    ResponderEliminar
  6. Hola Alex,

    Nunca he necesitado hacer lo que planteabas, ni tampoco tengo escáner, con lo cual nunca se me había dado esa situación, pero supongo que habrá bastante gente que esté interesada en saber cómo solucionarlo, así que te agradecemos que nos mantengas informados sobre los avances ;).

    Un saludo.

    ResponderEliminar
  7. Creo que he llegado al máximo de las (o de mis) posibilidades. En efecto, cuando un pdf no está creado caracter por caracter, sino que se ha creado a partir de una imagen escaneada, las marcas de agua son defectuosas.

    No lo son (defectuosas) para su visualización en pantalla, pero a la hora de imprimir, el texto aparece cortado. Pasa lo mismo aunque se cree la marca de agua con el mismo Acrobat, lo que es un puntazo a favor del PDFTK, ya que consigue prácticamente el mismo resultado que el Adobe Acrobat Pro con sus propias herramientas.

    En cuanto al uso del OCR, sólo he probado uno gratuito, así que no puedo aportar mucho. Éste funcionaba a las mil maravillas a la hora de sacar el texto de la imagen, pero lo dejaba en texto plano, quitando todo el formato del documento. Quizás haya otros más sofisticados que incluso puedan mantener el formato del documento, pero los ciento y pico euros que he visto que cuestan algunos me han echado un poco hacia atrás.

    Así pues, sin un OCR que haga lo que necesitamos, y la limitación del ACROBAT (que no del PDFTK) a la hora de crear las marcas de agua, mi solución final ha sido meter un cabecero y un pie de página.

    Así pues, me desdigo: las marcas de agua del PDFTK funcionan a las mil maravillas sin limitación alguna.

    Por otro lado, he visto que muchos usuarios requieren que el pdftk, dentro de los permisos que puede controlar, añada el "guardar como", para así poder prohibir que un usuario se lleve una copia de un pdf. En efecto, el PDFTK no aporta esa opción, pero no estoy para nada seguro que eso se pueda conseguir (crear un documento sin la opción "guardar como").

    Pero hay una solución muy sencilla, tanto como lo es no visualizar el pdf abriendo el acrobat en la máquina del usuario, sino embebiéndolo en el html de la página. Si a eso se añade que con Javascript podemos evitar mostrar la barra de menú, al usuario sólo le quedan las opciones de visualización. Que se lo pueda llevar con otras argucias, no lo discuto, pero de esta forma al menos, si el usuario quiere llevarse una copia, desde mi limitado conocimiento, le va a costar su tiempo (como por ejemplo, ir página por página haciendo printscreen a mansalva).

    Hay otro modo, y es que google, en una dirección algo así como 'www.google./.../docs?url="rutaamifichero"&embed=1' (a grandes rasgos, no la recuerdo con exactitud) ofrece visualizar tus pdf tal y como google muestra sus documentos.

    En fin, sé que al final me he salido un poco del tema, el EXCELENTE PDFTK, pero dado que casi todos los que acabamos en el pdftk es por problemas comunes como los que comento, espero que le pueda servir de ayuda a alguien.

    Vuelvo el lunes, espero que habiendo aprobado mi último examen de la carrera (ufff)...
    Saludos!

    ResponderEliminar