Como reducir PDF con GhostScript

compress-carUna manera sencilla de reducir el tamaño de un documento PDF es utilizando Ghostscript, una suite de software con licencia GNU GPL, que funciona como un interprete de lenguajes PostScript y Portable Document Format (PDF), estando disponible en los repositorios de todas las distribuciones GNU/Linux.

Algo que puede ser bastante útil con el típico PDF hecho a partir de imágenes escaneadas, que puede llegar a alcanzar un tamaño más que considerable (como el me acaba de pasar mi novia vía USB con más de 470 MB!, y de ahí surgió este post amigos…) haciendo muy difícil su envío por mail, además de ocupar espacio a lo loco en nuestro disco duro.

Ya habíamos visto en su día como hacer esto con ShrinkPDF, que es un script en bash basado en GhostScript que funciona decentemente a la hora de comprimir PDFs, pero como una de las características del buen linuxero es la curiosidad, el ansia por saber más y probar cosas nuevas, vamos a aprender a hacerlo con el propio GhostScript, bebiendo de la fuente directamente por así decirlo, vía terminal y con diferentes grados de resolución para alterar lo menos posible la calidad de su contenido.

Una sola linea de comando basta!:

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dQUIET -dBATCH -sOutputFile=destino.pdf origen.pdf

Donde sustituiremos “origen” por el nombre de nuestro archivo PDF inicial, y “destino” por el nombre que prefiráis para el nuevo archivo PDF que vamos a crear.

Ahora quiero que os fijéis en el parámetro:

-dPDFSETTINGS=

porque introduciendo diferentes valores (sería reemplazar /screen en el ejemplo anterior) modificamos la calidad, tamaño y resolución del archivo de salida:

  • dPDFSETTINGS=/screen (72 dpi, es el que mas reduce pero por contra ofrece la peor calidad)
  • dPDFSETTINGS=/ebook (150 dpi, calidad media)
  • dPDFSETTINGS=/printer (300 dpi, alta calidad)
  • dPDFSETTINGS=/prepress (300 dpi, alta calidad preservando el color)
  • dPDFSETTINGS=/default (según el manual es casi idéntico a screen, aunque en mis pruebas la calidad ha sido ligeramente superior)

En mi caso los mejores resultados a la hora de reducir el tamaño de un PDF al máximo manteniendo una cierta calidad para su lectura, lo he obtenido utilizando los parámetros /ebook y /printer (con /screen si el archivo tiene imágenes incrustadas la definición de estas baja mucho).

En el caso que os comentaba antes he conseguido reducir ese archivo de casi 500 MB a valores que oscilan entre 31-57 MB. En otro tipo de archivos más pequeños la reducción ha sido mucho menor pero todavía significativa (entre un 30-65% dependiendo del parámetro ejecutado).

Imagen | Marcovdz (CC BY-NC-ND 2.0)

10 thoughts on “Como reducir PDF con GhostScript”

  1. Xoán says:

    Tras leer publicaciones como ésta, echo en falta el típico botón de “agradecimiento” (con contador y demás) que aparece en muchos foros, para vaguetes como yo. Este artículo va directo al “chuletario” de mi kit de herramientas para administrativos en apuros que guardo en Evernote. ¡Gracias por compartirlo! ;D

    1. UBGonzo says:

      +1

      Queremos el botón de agradecimiento para ayer, primer aviso.

      1. tannhausser says:

        @Xoan @UBGonzo Vuestros deseos son ordenes…ya puse un botoncito de “me gusta” al final del post (lo del contador tengo que mirarlo)

        Un saludo y gracias por comentar!

  2. luisgac says:

    Buen post. Si guardamos un pdf solo para visualizarlo en pantalla no es necesario que los mapas de bits que contenga tengan una resolución mayor a 100 puntos por pulgada. A menos que dispongamos de un monitor hidpi. Otro factor a tener en cuenta es el formato de las imágenes. Si vamos a mandar el pdf a imprenta lo más aconsejable es emplear .tiff que ofrece compresión sin pérdida (LZW), pero que redunda en imágenes muy pesadas. En cuanto al texto no es para nada aconsejable escanear como imagen excepto casos muy particulares, si es que no queremos mermar nuestra “salud ocular” zoom in/zoom out mediante. Si no disponemos de un pdf con tipografías incrustadas o, por lo menos “contorneadas” en formato vectorial, lo mas sensato sería imprimir los textos a la mayor resolución disponible. Saludos.-

    1. tannhausser says:

      Gracias por los consejos @luisgac ! Es muy interesante todo eso que comentas, lo tendré en cuenta para el próximo escaneo 🙂

      Un saludo!

  3. Erving says:

    Lo ideal para reducir el tamaño de pdfs hechos de imágenes escaneadas, especialmente cuando tienen un alto contenido de texto, es reducir el bitmap de colores a sólo dos, blanco y negro, para ese bitmap existe un magnífico compresor que es el CCITT (Group4 en Imagemagick).

    convert -density 300 input.pdf -compress Group4 -monochrome -quality 100 output.pdf

    Este comando hace maravillas, y se puede ajustar la densidad para conseguir resultados óptimos.
    Si es muy largo consume muchísima RAM y lo más conveniente es dividirlo con pdftk input.pdf burst, convertir uno a uno y refundirlos con pdftk otra vez. Lo ideal es pasar cada imagen escaneada a pdf y luego refundirlos.

  4. Camilo says:

    Me sirvió (y servirá) mucho este artículo. Muchas gracias!!
    C.

  5. jorgied says:

    hola, excelente post. Pero tengo una duda, se pueden pasar parametros directorios? es decir le paso una carpeta destino y una origen para que me procese todos los archivos pdf en lote? si alguien sabe me va a salvar la vida, desde ya gracias

  6. Guillermo says:

    Es una explicación bastante útil, nos fue de gran ayuda la parte sobre las calidades de reducción (screen, ebook, printer, etc). Gracias.

    1. tannhausser says:

      De nada @Guillermo! Gracias a ti por pasarte y comentar 🙂

Deja un comentario