Credit image

¿Te gusta el diseño web? ¡Echa un vistazo a la documentación de LenguajeCSS.com!

10 operaciones útiles con archivos PDF

Recopilación de 10 operaciones útiles con archivos PDF para separar, dividir, añadir o unir páginas, extraer metadatos, añadir marcas de agua, etc...

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.

Escrito por Manz, el , en software. Comentarios recibidos: 18.

18 comentarios de lectores
Manz
Manz
1

Una forma de reemplazar la parte 2 del último punto con operaciones análogas, podría ser la siguiente: pdftk left-sections.pdf burst output %03d_L.pdf pdftk right-sections.pdf burst output %03d_R.pdf pdftk *_?.pdf cat output combinado.pdf En la primera línea, separamos cada página del documento de páginas impares con el formato 001_L.pdf, 002_L.pdf, 003_L.pdf, etc... En la segunda, lo mismo con las páginas pares: 001_R.pdf, 002_R.pdf, 003_R.pdf, etc... En la tercera línea aprovechamos que el orden alfabético de los archivos al utilizar un comodín (*_?.pdf) sería 001_L.pdf, 001_R.pdf, 002_L.pdf, 002_R.pdf, etc... y unimos todas las páginas en un documento llamado combinado.pdf. Obviamente, la parte 2 especificada en el artículo es más eficiente y rápida, pero es un buen ejemplo para ver otras formas de realizarlo.

  • -1
kutastre
kutastre
2

Algunos de estos procesos tambien son posibles con pdfcreator poniendo la impresora virtual en pausa y luego cambiando de orden las paginas. Hay que reconocer que la herramienta que comentas es muy potente aunque se encuentra a faltar un entorno grafico.

  • -1
Manz
Manz
3

@kutastre: Realmente, la potencia de esta herramienta (y todas las que proporcionan una línea de comandos) es la posibilidad de automatizar y realizar tareas para un alto número de archivos (por ejemplo, una colección de 150 archivos PDF).

zurdo
zurdo
4

@kutastre: Ese es el punto importante, algunos de los procesos, desconozco si existen todas las opciones con pdf creator pero me imagino que eso no es todo lo que puede hacer pdftk, y para quienes quieren saber como se usa, me parecen muy bien estos 10 puntos, sencillos pero dan pie a quien desee aprender más a que experimente con ellos, además que son los puntos concretos que más se suelen necesitar cuando trabajas con pdf, gracias por este muy buen post

Jonathan
Jonathan
5

Esta increíble su blog me gustan mucho como ha ordenado en el lateral izquierdo los botones de compartir.

David
David
6

Acabo de descubrir tu blog y no me perdono no haberlo encontrado antes... muy interesantes tus post

  • 1
trukete
trukete
7

Interesante :D

Aurelio
Aurelio
8

Perdón por mi ignorancia, pero ¿es esto una novedad?. Vista Previa de OS X lo hace desde hace muchos meses (al menos desde Snow Leopard) y con Automator se construyen flujos de trabajo para lotes de archivos muy fácilmente.

  • -1
Sergio
Sergio
9

Excelente herramienta, y muy bien explicado. Gracias.

Bandancha
Bandancha
10

Soy un novato en esto de la linea de comandos, estuve rebuscando por ahí, pero no encuentro el modo de aplicarlo, suponte que quisiera aplicarle la marca de agua: pdftk documento.pdf stamp stamp.pdf output documento-final.pdf a un conjunto de pdfs, y generar un lote nuevo con el mismo nombre u otro diferente, de una sola vez, no? no re escribiendo cada vez el nombre del archivo desde Ya tantisimas gracias

citio
citio
11

aparece un error que me dice que no que el archivo o el directorio no existen de la primera parte del paso 10 para dividir un pdf

Michel
Michel
12

Acabo de encontrar este blog, que por lo visto hasta ahora me parece magnífico y muy útil. En mi opinión todo lo necesario para manipular básicamente los Pdfs (sin exigencias de alto nivel) se puede hacer con el: PdfRizator http://www.rttsoftware.com/pdfrizator.html Hace lo que describes de una forma muy sencilla y visual. Desde que lo descubrí no puedo pasar sin él. Me he suscrito al blog esperando aprender y estar al día. Muchas gracias por tu trabajo.

Nomnix
Nomnix
13

Hola. Acabo de descubri el blog, y me ha resultado muy útil. Pero no he encontrado una opción que ahora mismo necesito, que es justamente LA INVERSA de lo descrito en el punto 1o, es decir: COMPONER varios documentos PDF en un solo documento PDF y todos en UNA SOLA P?GINA, alineando los márgenes (se trata de hacer un plano completo en una sola página, desde las partes del mismo que están en varias páginas). Saludos.

Antonio
Antonio
14

En el punto 5 falta la palabra output entre burst y pagina, pero ha estado muy bien el post. Gracias.

gera
gera
15

alguna manera de eliminar las paginas que estén únicamente en blanco de forma masiva. que se aplique a muchos archivos al mismo tiempo,

JuanCasta
JuanCasta
16

Deseo saber como variar uno pocos grados un escaneo o un pdf ya hecho hay algun programa que se pueda variar unos pocos grados (no 90º, 180º, 270º) sino 5º, 10º o 3º lo que deseemos. Tambien hay algún escane que sin escanear ponga en pantalla como quedaría el escaneo antes de realizarlo así evitar el tener que luego corregirlo (los grados me refiero) Gracias Juan

Eugenio
Eugenio
17

Hola!!!... Muy bueno, pero muy bueno!!!...tu aporte para los que estamos muy entusiasmados con los PDF´s. Voy a aprovechar de tus conocimientos para hacerte una consulta: se puede embeber controles poscript o ghostscript en el documento fuente o sea el que utilizaré para generar el PDF???... desde ya muy agradecido por tu atención. Saludos!!!

Javi
Javi
18

hola, como podria hacer para seaparar un fichero de entrada en n pdfs? Por ejemplo, quiero un listado de 100 paginas separarlo y crear pdfs de 4 en 4. Gracias

Publica tu opinión

Si lo deseas, puedes utilizar el siguiente formulario para publicar tu opinión o responder a alguna de las existentes:

Previsualización

Aquí se previsualizará su comentario. Revise que sea correcto antes de publicarlo.