linux - peso - comprimir pdf a la mitad
Optimizar archivos PDF(con Ghostscript u otro) (7)
Esto funcionó para mí
Convierta su PDF a PS (esto crea un archivo grande
pdf2ps large.pdf very_large.ps
Convierte la nueva PS a un PDF
ps2pdf very_large.ps small.pdf
Fuente: https://pandemoniumillusion.wordpress.com/2008/05/07/compress-a-pdf-with-pdftk/
¿Es Ghostscript la mejor opción si desea optimizar un archivo PDF y reducir el tamaño del archivo?
Necesito almacenar muchos archivos PDF y, por lo tanto, necesito optimizar y reducir el tamaño del archivo tanto como sea posible
¿Alguien tiene alguna experiencia con Ghostscript y / u otra?
línea de comando
exec(''gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dCompatibilityLevel=1.4
-dPDFSETTINGS=/screen -sOutputFile=''.$file_new.'' ''.$file);
Ghostscript viene con dos utilidades útiles: pdfopt
y ps2pdf14
. Ambos pueden utilizarse para optimizar archivos PDF, pero en algunas ocasiones el tamaño del archivo "optimizado" puede ser mayor que el original.
Perderá en calidad, pero si no es un problema, la convert
de ImageMagick puede ser útil:
convert original.pdf reduced.pdf
(Acabo de convertir un archivo de 126 MB en uno de 14 MB ...)
Consulte también esta publicación para conocer las opciones relacionadas.
Puede encontrar que pdftocairo
(de Poppler ) puede hacer archivos PDF más pequeños, pero tenga en cuenta que pdftocairo
algunas características (como hipervínculos).
Puede obtener buenos resultados convirtiendo de PDF a Postscript, luego de vuelta a PDF usando
pdf2ps file.pdf file.ps
ps2pdf -dPDFSETTINGS=/ebook file.ps file-optimized.pdf
El valor de argument -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 llegar a ser 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 potentes) 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 disminución de la resolución de la imagen que lo que hace la -dPDFSETTINGS=/screen
genérica -dPDFSETTINGS=/screen
(que define algunos valores predeterminados generales, que es posible que desee anular):
- Cómo reducir la resolución de las imágenes en un archivo pdf?
Básicamente, le dice cómo hacer que Ghostscript muestree todas las imágenes a una resolución de -dPDFSETTINGS=/screen
(este valor es lo que -dPDFSETTINGS=/screen
usa - es posible que desee bajar aún más):
-dDownsampleColorImages=true /
-dDownsampleGrayImages=true /
-dDownsampleMonoImages=true /
-dColorImageResolution=72 /
-dGrayImageResolution=72 /
-dMonoImageResolution=72 /
Si quieres probar si Ghostscript también puede ''desentrañar'' 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 ), puedes intentar agregue 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 la resolución de imagen de disminución de la resolución seguramente reducirá la calidad (irreversiblemente), y las fuentes que desacoplan harán que sea difícil o imposible visualizar e imprimir los 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 comando. Este parámetro lleva a Ghostscript a intentar detectar cualquier imagen que esté incorporada en el PDF varias veces. Esto puede suceder si utiliza una imagen como logotipo o fondo de página, y si el software generador de PDF no está optimizado para esta situación. Este solía ser el caso con las versiones anteriores de OpenOffice / LibreOffice (he probado la última versión de LibreOffice, v4.3.5.2, y ya no hace cosas tan estúpidas).
También ocurre 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
Las versiones recientes de la utilidad pdfimages
de Poppler han agregado soporte para un parámetro -list
, que puede -list
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, que se comprime con compresión JPEG, tiene un ancho de 423 píxeles y una altura de 600 píxeles y se procesa con 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
a continuación, 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 integrados en p3.pdf
ahora. p3.pdf
consta de 3 páginas:
pdfinfo p3.pdf | grep Pages:
Pages: 3
Optimice el PDF reemplazando las 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
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 en la lista por página, pero el ID del objeto PDF es siempre el mismo ahora: 10.
ls -ltrh p1.pdf p3.pdf p3-optim.pdf
-rw-r--r--@ 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" hecha con pdftk aumentó el tamaño del archivo original a tres veces el original. La optimización de Ghostscript lo redujo en una cantidad considerable.
Las versiones más recientes de Ghostscript pueden incluso aplicar -dDetectDuplicateImages
por defecto. (AFAIR, v9.02, que lo introdujo por primera vez, no lo usó por defecto).
Yo uso Ghostscript con las siguientes opciones tomadas desde here .
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen /
-dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf input.pdf