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.pdfCon 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.pdfSeleccionar algunas páginas
Con pdfjam
$ pdfjam --no-landscape original.pdf 3,7,12-23,34 --outfile resultado.pdfCon pdftk
$ pdftk original.pdf cat 1-8 output resultado.pdfRotar páginas
Con pdfjam
$ pdf90 original.pdfTambién hay comandos pdf180 y pdf270.
Con pdftk:
$ pdftk original.pdf cat 1-end<b>X</b> output resultado.pdfDonde ‘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.pdfPor 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.pdfCambiar 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.pdfManipulació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: 1Si 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.pdfCon 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/nullConvertir a «raster»
Con Ghostscript
[visto en commandlinefu.com]
$ gs -dNOPAUSE -sDEVICE=jpeg -r144 -sOutputFile=p%03d.jpg file.pdfCon convert
[visto en linuxquestions]
$ convert -density 300x300 file.pdf salida.pngCrear 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.pdfComo es lógico, el fichero resultante ocupará mucho más que el original (de 5 a 10 veces).