Esta receta es un compendio de pequeños trucos y utilidades para manipular ficheros PDF con los programas libres habituales en un sistema GNU

En realidad pienso ir apuntando aquí las soluciones que voy encontrando a problemas que me surgen cuando tengo que hacer ciertas «operaciones imprevistas» con ficheros PDF. Se admiten sugerencias para ir incorporando a la receta.

Unir varios documentos

Con pdfjoin del paquete pdfjam (visto en Linuca).

$ pdfjoin --fitpaper true fichero1.pdf fichero2.pdf fichero3.pdf --outfile final.pdf

Con GNU/GhostScript (por Gufete):

 $ gs -dColorImageFilter=/LZWEncode -dAutoFilterColorImages=false -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=pre_final.pdf fichero1.pdf fichero2.pdf fichero3.pdf
$ pdfopt pre_final.pdf final.pdf

Seleccionar algunas páginas

Con pdfjam

 $ pdfjam --no-landscape original.pdf  3,7,12-23,34 --outfile resultado.pdf

Con pdftk

 $ pdftk original.pdf cat 1-8 output resultado.pdf

Rotar páginas

Con pdfjam

 $ pdf90 original.pdf

También hay comandos pdf180 y pdf270.

Con pdftk:

 $ pdftk original.pdf cat 1-end<b>X</b> output resultado.pdf

Donde ‘X’ puede ser:

  • N: 0
  • E: 90
  • S: 180
  • W: 270
  • L: -90
  • R: +90
  • D: +180

Convertir un documento a formato de varias páginas por hoja

Utilizando el programa pdfnup del paquete pdfjam:

$ pdfnup --nup 2x1 --outfile salida.pdf original.pdf

Por ejemplo, para pasar transparencias apaisadas a página completa a formato de 3 páginas por hoja alineadas a la izquierda y con márgenes usa:

$ pdfnup --nup 1x3 --offset "-3cm 0" --trim "-2cm -2cm -2cm -2cm" original.pdf

«Escalar» el tamaño de la página

En realidad se trata de aumentar los márgenes reduciendo el tamaño del área impresa. También con pdfnup:

 $ pdfnup --nup 1x1 --scale 0.9 original.pdf

Cambiar el formato de página

Si tienes que imprimir un .pdf cuyo formato de página no es A4 probablemente acabarás desperdiciando gran parte de la hoja porque por aquí todas las impresoras domesticas son A4. Con los siguientes comandos puedes convertir el formato de página:

$  pdftk original.pdf cat output sin_xrefs.pdf
$ gs -r600 -dDITHERPPI=120 -dNOCIE -dFIXEDMEDIA -sPAPERSIZE=a4 -sDEVICE=pdfwrite -q -dNOPAUSE -dSAFER -dBATCH -dPDFFitPage -sOutputFile=resultado.pdf pdfopt.ps sin_xrefs.pdf

Manipulación de metadatos

Con pdftk

Para leer los metadatos de un PDF:

$ pdftk original.pdf dump_data output data.txt
$ cat data.txt
InfoKey: Creator
InfoValue: Writer&#0;
InfoKey: Producer
InfoValue: OpenOffice.org 3.1&#0;
InfoKey: CreationDate
InfoValue: D:20090923135542+02'00'
PdfID0: e5d831c33f77ac694b32456732f2c86
PdfID1: e5d831c33f77ac694b32456732f2c86
NumberOfPages: 1

Si se omite el output data.txt, imprime los datos a la salida estándar (la consola) en lugar de en el fichero.

Para modificar los metadatos se debe escribir un fichero con el mismo formato que el data.txt anterior (o modificar uno generado así) y ejecutar:

$ pdftk original.pdf update_info data.txt output resultado.pdf

Con exiftool

Para mostrar los metadatos escribe una cadena con variables tipo-shell (atento a las comillas simples):

$  exiftool fichero.pdf -p '$Title $Author'

Para modificarlos utiliza esos mismas claves como opciones:

$ exiftool fichero.pdf -Title="Algún cuento chino"

Convertir a escala de grises

[visto en http://handyfloss.net/2008.09/making-a-pdf-grayscale-with-ghostscript/]

$ gs -sOutputFile=grayscale.pdf -sDEVICE=pdfwrite \
-sColorConversionStrategy=Gray -dProcessColorModel=/DeviceGray \
-dCompatibilityLevel=1.4 -dNOPAUSE -dBATCH color.pdf < /dev/null

Convertir a «raster»

Con Ghostscript

[visto en commandlinefu.com]

$ gs -dNOPAUSE -sDEVICE=jpeg -r144 -sOutputFile=p%03d.jpg file.pdf

Con convert

[visto en linuxquestions]

$ convert -density 300x300 file.pdf salida.png

Crear un PDF con fuentes empotradas

Si has hecho un .pdf con pdflatex lo más probable es que no incluya las fuentes, de modo que el programa pueda renderizar el documento con las fuentes del sistema. Sin embargo, a veces se requiere disponer de un .pdf auto-contenido para garantizar que se verá del mismo modo en cualquier parte. Para lograrlo ejecuta lo sisguiente:

$ pdf2ps original.pdf
$ ps2pdf14 -dPDFSETTINGS=/prepress -dEmbedAllFonts=true original.ps resultado.pdf

Como es lógico, el fichero resultante ocupará mucho más que el original (de 5 a 10 veces).



blog comments powered by Disqus