GNU/Linux >> Tutoriales Linux >  >> Linux

Optimizar archivos PDF (con Ghostscript u otro)

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

Puede encontrar que pdftocairo (de Poppler) puede crear archivos PDF más pequeños, pero tenga en cuenta que eliminará algunas funciones (como los hipervínculos).


Puede obtener buenos resultados convirtiendo de PDF a Postscript y luego de vuelta a PDF usando

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 , consulte http://milan.kupcevic.net/ghostscript-ps-pdf/ para obtener una referencia.

El archivo Postscript puede volverse bastante grande, pero los resultados valen la pena. Pasé de un PDF de 60 MB a un archivo Postscript de 140 MB, pero terminé con un PDF optimizado de 1,1 MB.


Si busca un software gratuito (como en 'libre'), Ghostscript es seguramente su mejor opción. Sin embargo, no siempre es fácil de usar:algunas de sus opciones de procesamiento (muy poderosas) no son fáciles de encontrar documentadas.

Eche un vistazo a esta respuesta, que explica cómo ejecutar un control más detallado sobre la reducción de resolución de la imagen que el genérico -dPDFSETTINGS=/screen hace (que define algunos valores predeterminados generales, que es posible que desee anular):

  • ¿Cómo reducir la resolución de imágenes dentro de un archivo pdf?

Básicamente, le dice cómo hacer que Ghostscript reduzca la resolución de todas las imágenes a una resolución de 72 ppp (este valor es lo que -dPDFSETTINGS=/screen usos, es posible que desee ir aún más bajo):

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

Si desea probar si Ghostscript también puede 'desincrustar' las fuentes utilizadas (a veces funciona, a veces no, dependiendo de la complejidad de la fuente incrustada y también del tipo de fuente utilizado ), puede intentar agregar lo siguiente a su comando gs:

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: Tenga en cuenta que reducir la resolución de la imagen seguramente reducirá la calidad (irreversiblemente) y desintegrar las fuentes hará que sea difícil o imposible mostrar e imprimir los archivos PDF a menos que las mismas fuentes estén instaladas en la máquina....

Actualizar

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

-dDetectDuplicateImages=true

a la línea de comandos. Este parámetro hace que Ghostscript intente detectar cualquier imagen que esté incrustada en el PDF varias veces. Esto puede suceder si usa una imagen como logotipo o fondo de página, y si el software de generación de PDF no está optimizado para esta situación. Este solía ser el caso con versiones anteriores de OpenOffice/LibreOffice (probé la última versión de LibreOffice, v4.3.5.2, y ya no hace cosas tan estúpidas).

También sucede si concatenas archivos PDF con la ayuda de pdftk . Para mostrarle el efecto y cómo puede descubrirlo, veamos un archivo PDF de muestra:

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 pdfimages de Poppler La utilidad ha agregado soporte para un -list parámetro, que puede listar 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 PDF de muestra es un documento de 1 página que contiene una imagen comprimida con compresión JPEG, tiene un ancho de 423 píxeles y una altura de 600 píxeles y se muestra a una resolución de 52 PPI en la página.

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

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

entonces el resultado muestra estas propiedades de 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 objetos PDF idénticos (con los ID 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

Optimiza PDF reemplazando imágenes duplicadas con referencias

Ahora podemos aplicar la optimización mencionada anteriormente con la ayuda de Ghostscript

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

Comprobando:

 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 en la lista por página, pero el ID del objeto PDF siempre es el mismo 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 puede ver, la concatenación "tonta" realizada con pdftk aumentó el tamaño del archivo original a tres veces el original. La optimización de Ghostscript lo redujo considerablemente.

Las versiones más recientes de Ghostscript pueden incluso aplicar el -dDetectDuplicateImages por defecto. (AFAIR, v9.02, que lo introdujo por primera vez, no lo usó de forma predeterminada).


Linux
  1. Cómo cifrar archivos con gocryptfs en Linux

  2. ¿Cambiar el nombre de los archivos en el directorio?

  3. ¿Ordenar archivos en una carpeta específica con Ranger?

  4. Combinar archivos pdf con clasificación numérica

  5. Convertir un PDF a blanco y negro con ghostscript

Encuentra archivos perdidos con Scalpel

Primeros pasos con el comando Tar

Cómo subir archivos con FileZilla

Subir archivos con Monsta FTP

Comando lsof en Linux con ejemplos

Comando Linux comm con ejemplos