Optimizar los archivos PDF (con Ghostscript o de otro tipo)

Ghostscript es la mejor opción si usted desea optimizar un archivo PDF y reducir el tamaño del archivo?

Necesito almacenar gran cantidad de archivos PDF y por lo tanto necesita para optimizar y reducir el tamaño de archivo tanto como sea posible

¿Alguien tiene alguna experiencia con Ghostscript y/o otros?

línea de comandos

exec('gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dCompatibilityLevel=1.4
-dPDFSETTINGS=/screen -sOutputFile='.$file_new.' '.$file);
  • Estás buscando gratis o de Software Libre sólo? O es propiedad de pago-ware también una opción?
  • Tienes alguna idea de que los objetos en sus documentos Pdf están usando más espacio? Las fuentes? Imágenes de alta resolución?
InformationsquelleAutor clarkk | 2012-05-04

7 Kommentare

  1. 77

    Si estás buscando un Libre (como en ‘libre’) de Software, Ghostscript es sin duda su mejor opción. Sin embargo, no es siempre fácil de usar, algunos de sus (muy potente) opciones de procesamiento no son fáciles de encontrar documentado.

    Echar un vistazo a esta respuesta, que se explica cómo ejecutar un mejor control sobre la resolución de la imagen la reducción de tamaño de lo que el genérico -dPDFSETTINGS=/screen hace (que define una serie de global valores predeterminados, es posible que desee anular):

    Básicamente, lo que te dice cómo hacer Ghostscript reducir la resolución de todas las imágenes a una resolución de 72 dpi (este valor es lo que -dPDFSETTINGS=/screen utiliza — usted puede desear ir incluso inferior):

    -dDownsampleColorImages=true \
    -dDownsampleGrayImages=true \
    -dDownsampleMonoImages=true \
    -dColorImageResolution=72 \
    -dGrayImageResolution=72 \
    -dMonoImageResolution=72 \
    

    Si quieres probar si Ghostscript es capaz también de onu-incrustar’ las fuentes utilizadas (a veces funciona, a veces no, dependiendo de la complejidad de la fuente incrustada, y también en el tipo de fuente utilizado), usted puede tratar de añadir el siguiente a su gs comando:

    gs \
      -o output.pdf \
       [...other options...] \
      -dEmbedAllFonts=false \
      -dSubsetFonts=true \
      -dConvertCMYKImagesToRGB=true \
      -dCompressFonts=true \
      -c ".setpdfwrite <</AlwaysEmbed [ ]>> setdistillerparams" \
      -c ".setpdfwrite <</NeverEmbed [/Courier /Courier-Bold /Courier-Oblique /Courier-BoldOblique /Helvetica /Helvetica-Bold /Helvetica-Oblique /Helvetica-BoldOblique /Times-Roman /Times-Bold /Times-Italic /Times-BoldItalic /Symbol /ZapfDingbats /Arial]>> setdistillerparams" \
      -f input.pdf
    

    Nota: Ser conscientes de que la disminución de resolución la resolución de la imagen seguramente va a reducir la calidad (irreversible), y dis-la incrustación de fuentes, será difícil o imposible de visualizar e imprimir los archivos Pdf a menos que las mismas fuentes que están instaladas en la máquina….


    Actualización

    Una opción que se me había pasado por alto en mi respuesta original es agregar

    -dDetectDuplicateImages=true
    

    a la línea de comandos. Este parámetro lleva Ghostscript para intentar detectar las imágenes que están incrustadas en el PDF varias veces. Esto puede suceder si se utiliza una imagen como logo o fondo de la página, y si el PDF de generación de software no está optimizado para esta situación. Este solía ser el caso con más viejas versiones de OpenOffice/LibreOffice (he probado la última versión de LibreOffice, v4.3.5.2, y que ya no hacen cosas tan estúpidas).

    También sucede si concatenar los archivos PDF con la ayuda de pdftk. Para mostrar el efecto, y cómo usted puede descubrir que, vamos a ver un ejemplo de archivo PDF:

    pdfinfo p1.pdf
    
     Producer:       libtiff /tiff2pdf - 20120922
     CreationDate:   Tue Jan  6 19:36:34 2015
     ModDate:        Tue Jan  6 19:36:34 2015
     Tagged:         no
     UserProperties: no
     Suspects:       no
     Form:           none
     JavaScript:     no
     Pages:          1
     Encrypted:      no
     Page size:      595 x 842 pts (A4)
     Page rot:       0
     File size:      20983 bytes
     Optimized:      no
     PDF version:    1.1
    

    Versiones recientes de Poppler del pdfimages utilidad han añadido soporte para una -list parámetro, el cual puede incluir todas las imágenes incluidas en un archivo PDF:

    pdfimages -list p1.pdf
    
     page num  type width height color comp bpc  enc interp objectID x-ppi y-ppi size ratio
     --------------------------------------------------------------------------------------
        1   0 image    423   600   rgb    3   8 jpeg     no     7  0    52    52 19.2K 2.6%
    

    Este ejemplo PDF es un 1-documento de página, que contiene una imagen, que está comprimido con la compresión JPEG, tiene un ancho de 423 píxeles y una altura de 600 píxeles y representa a una resolución de 52 PPI en la página.

    Si queremos concatenar 3 copias de este archivo con la ayuda de pdftk así:

    pdftk p1.pdf p1.pdf p1.pdf cat output p3.pdf
    

    a continuación, el resultado muestra que estas propiedades de la imagen a través de pdfimages -list:

    pdfimages -list p3.pdf
    
     page num  type width height color comp bpc  enc interp objectID x-ppi y-ppi size ratio
     --------------------------------------------------------------------------------------
        1   0 image   423    600   rgb    3   8 jpeg     no     4  0    52    52 19.2K 2.6%
        2   1 image   423    600   rgb    3   8 jpeg     no     8  0    52    52 19.2K 2.6%
        3   2 image   423    600   rgb    3   8 jpeg     no    12  0    52    52 19.2K 2.6%
    

    Esto muestra que hay 3 idénticos objetos PDF (con el Id de 4, 8 y 12), que están incrustados en p3.pdf ahora. p3.pdf consta de 3 páginas:

    pdfinfo p3.pdf | grep Pages:
    
     Pages:          3
    

    Optimizar PDF mediante la sustitución de imágenes duplicadas con referencias

    Ahora podemos aplicar el mencionado optimización con la ayuda de Ghostscript

     gs -o p3-optim.pdf -sDEVICE=pdfwrite -dDetectDuplicateImages=true p3.pdf
    

    Comprobación:

     pdfimages -list p3-optim.pdf
    
     page num  type width height color comp bpc  enc interp objectID x-ppi y-ppi size ratio
     --------------------------------------------------------------------------------------
        1   0 image   423    600   rgb    3   8 jpeg     no    10  0    52    52 19.2K 2.6%
        2   1 image   423    600   rgb    3   8 jpeg     no    10  0    52    52 19.2K 2.6%
        3   2 image   423    600   rgb    3   8 jpeg     no    10  0    52    52 19.2K 2.6%
    

    Todavía hay una imagen por página, pero el PDF ID de objeto es siempre el mismo que ahora: 10.

     ls -ltrh p1.pdf p3.pdf p3-optim.pdf
    
       [email protected] 1 kp  staff    20K Jan  6 19:36 p1.pdf
       -rw-r--r--  1 kp  staff    60K Jan  6 19:37 p3.pdf
       -rw-r--r--  1 kp  staff    16K Jan  6 19:40 p3-optim.pdf
    

    Como se puede ver, el «mudo» concatentation hecho con pdftk aumento en el tamaño del archivo original a tres veces el original. La optimización de Ghostscript trajo hacia abajo por una cantidad considerable.

    Las versiones más recientes de Ghostscript puede incluso aplicar el -dDetectDuplicateImages por defecto. (AFAIR, v9.02, donde se introdujo por primera vez, no lo uso de forma predeterminada).

    • gracias por la respuesta 🙂 lo he probado, pero cuando se establece el dpi a 72 manualmente la calidad es menor cuando la configuración /screen y el tamaño del archivo es todavía inferior con /screen 🙂
    • a lo que me refería era.. La calidad es mejor con /screen y el tamaño del archivo es menor compard para ajustar manualmente la configuración de la dpi a 72
    • Me interesaría ver una muestra en PDF que muestra esta sucediendo. Se puede proporcionar una (o se trata de invadir la privacidad de alguien)?
    • aquí, dynaccount.com/tmp/35.pdf aquí dynaccount.com/tmp/36.pdf.. Mira el logotipo en la parte superior del documento.. 35.pdf (44.81 kb – manualmente dpi) y 36.pdf (44.73 kb /pantalla)
    • Para asegurarse de que yo no entiendo, estos dos archivos son los resultados de las dos de la conversión de comandos? (Yo estaba interesado en uno de los Pdf originales para que yo pudiera jugar con los parámetros de conversión a mí mismo….)
    • En aras de la exhaustividad, una lista de opciones que puede ser utilizado para convertir archivos Pdf con GhostScript/ps2pdf está disponible aquí: ghostscript.com/doc/current/Ps2pdf.htm

  2. 28

    Puede obtener buenos resultados mediante la conversión de PDF a Postscript, luego de vuelta a PDF utilizando

    pdf2ps file.pdf file.ps
    ps2pdf -dPDFSETTINGS=/ebook file.ps file-optimized.pdf
    

    El valor del argumento -dPDFSETTINGS define la calidad de las imágenes en el PDF resultante. Las opciones son, de baja a alta calidad: /screen, /default, /ebook, /printer, /prepress, ver http://milan.kupcevic.net/ghostscript-ps-pdf/ para una referencia.

    El archivo Postscript puede ser bastante grande, pero el resultado vale la pena. Me fui de un 60 MB PDF a un 140 MB archivo Postscript, pero terminó con un 1.1 MB PDF optimizado.

    • Sería increíble tener un poco de ayuda con el modo de hacerlo en un entorno Windows…
    • Alguna razón por la que esto podría resultar en archivos más pequeños que la utilización del gs con ajustes adecuados? Además, hacer esto puede resultar en algunos de los problemas causados por la Postscript que faltan algunas características (por ejemplo, alfa de transparencia, degradados, los perfiles de ICC).
    • No sé, sólo un informe de lo que funcionó bien en mi caso con la esperanza de que otros también podrían beneficiarse de ella. Siéntase libre de publicar una mejor solución o mejorar los existentes.
    • El primer paso es innecesario. ps2pdf aceptará pdf archivos de entrada.
    • Conversión a ps primero que hace una gran diferencia para mí. Esta es la versión 9.26 de ps2pdf y pdf2ps
  3. 7

    Yo uso Ghostscript con las siguientes opciones tomadas de aquí.

    gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen \
     -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf input.pdf
    
    • Por favor, tenga en cuenta que aunque por lo general funciona bien no será capaz de funcionar correctamente con documentos Pdf rellenables
  4. 5

    Usted puede encontrar que pdftocairo (de Poppler) puede hacer que los archivos Pdf más pequeños, pero ten cuidado de que la tira de algunas características (tales como hipervínculos) de distancia.

    • Gracias, me encontré con que ps2pdf14 a veces los cambios de la salida, y en este caso, pdftocairo hecho el PDF más pequeños (500K a 110K) pero recortada, por lo que añadió explícita margen en Inkscape antes de guardar como PDF, entonces corrió a través de pdftocairo y entonces a través de la pdfcrop (de Tex) reducción a 90K.
  5. 4

    Usted perderá calidad, pero si no es un problema, a continuación, ImageMagick del convert puede resulta útil :

    convert original.pdf reduced.pdf
    

    Tenga en cuenta que no siempre el trabajo : I una vez que se convierte en un 126 MB archivo en un archivo de 14 MB de un uso de este comando, pero otra vez se duplicó el tamaño de un 350 Ko archivo.

    De todos modos vale la pena darle una oportunidad…

    Como se ha mencionado en los comentarios, por supuesto, no hay ningún punto en la aplicación de este comando en un vector basado en PDF, por lo que sólo será útil en las imágenes rasterizadas.

    Ver también este post de opciones relacionadas.

    • Esto sólo tiene sentido para los archivos PDF basados en imágenes digitalizadas, de lo contrario ImageMagick va a convertir su vector PDF basado en una imagen de trama, y el archivo resultante en realidad podría ser más grande que el original.
    • Supongo que estás en lo correcto acerca de vectores basados en archivos Pdf, por supuesto, pero creo que tiene sentido para cualquier tipo de imágenes de trama, de la que las imágenes escaneadas son sólo un pequeño subconjunto. En mi caso el documento se hizo a partir de la llanura de fotografías digitales.
    • Sí, claro, me refería a las imágenes escaneadas como el más común de caso de uso de archivos PDF con sólo las imágenes de trama (y tal vez algo de texto transparente de OCR) en el interior. Yo sólo quería añadir que el comentario como un comentario de cualquier persona que quiera utilizar su solución.
  6. 3

    Ghostscript viene con dos utilidades: pdfopt y ps2pdf14. Ambos pueden ser utilizados para optimizar el archivo PDF(s), pero en algunas ocasiones el tamaño de «optimizado» el archivo puede ser más grande que el original.

    • ps2pdf14 input.pdf output.pdf hizo lo mismo que gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf input.pdf. Por puro contenido del texto en la salida de la señal.pdf es el 25% del tamaño de la entrada.archivo
    • pdfopt producido más grande de salida
    • pdfopt ya no viene con ghostscript

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea