Manipulación de ficheros PDF
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�
InfoKey: Producer
InfoValue: OpenOffice.org 3.1�
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).