opción de compresión pdftk


Utilizo pdftk para comprimir un pdf usando la siguiente línea de comandos

pdftk file1.pdf output file2.pdf compress

Funciona a medida que el peso de mi archivo disminuye.

Hay [opciones] para cambiar la compresión???

O tal vez otras soluciones para comprimir mi archivo? Es pesado porque algunos gráficos tienen muchos puntos. ¿Hay alguna manera de convertir estos gráficos a jpg por ejemplo y adaptar la compresión?

Author: RockScience, 2011-03-14

10 answers

Tuve el mismo problema y encontré dos soluciones diferentes (ver este hilo para más detalles). Ambos redujeron drásticamente el tamaño de mi PDF sin comprimir.

  • Pixelado (con pérdida):

    convert input.pdf -compress Zip output.pdf
    
  • Sin píxeles (sin pérdidas, pero puede mostrarse ligeramente diferente):

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

Edit : Acabo de descubrir otra opción (para la compresión sin pérdida), que evita el comando gs desagradable. qpdf es una herramienta ordenada que convierte archivos PDF (compresión / descompresión, cifrado / descifrado), y es mucho más rápido que el comando gs:

qpdf --linearize input.pdf output.pdf
 106
Author: nullglob,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-10 19:48:09

Este procedimiento funciona bastante bien

pdf2ps large.pdf very_large.ps

ps2pdf very_large.ps small.pdf

Dale una oportunidad.

 33
Author: jortizromo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-03-25 21:38:46

Tratando de comprimir un PDF que hice con 400ppi tiffs, en su mayoría de 8 bits, algunos de 24 bits, con compresión PackBits, usando tiff2pdf comprimido con Zip/Deflate. Un problema que tuve con cada uno de estos métodos: ninguno de los métodos anteriores conservó el ÍNDICE de marcadores que creé manualmente en Acrobat Pro X. Ni siquiera la configuración recomendada ebook para gs. Claro, podría abrir una copia del original con el ÍNDICE intacto y hacer un Replace pages pero desafortunadamente, ninguno de estos métodos hizo un un trabajo satisfactorio para empezar. O redujeron el tamaño tanto que la calidad fue inaceptablemente pixelada, o no redujeron el tamaño en absoluto y en un caso realmente lo aumentaron a pesar de la pérdida de calidad.

pdftk compress:

no change in size
bookmarks TOC are gone

gs screen:

takes a ridiculously long time and 100% CPU
errors:
    sfopen: gs_parse_file_name failed.                                 ? 
    | ./base/gsicc_manage.c:1651: gsicc_set_device_profile(): cannot find device profile
74.8MB-->10.2MB hideously pixellated
bookmarks TOC are gone

gs printer:

takes a ridiculously long time and 100% CPU
no errors
74.8MB-->66.1MB
light blue background on pages 1-4
bookmarks TOC are gone

gs ebook:

errors:
    sfopen: gs_parse_file_name failed.
      ./base/gsicc_manage.c:1050: gsicc_open_search(): Could not find default_rgb.ic 
    | ./base/gsicc_manage.c:1651: gsicc_set_device_profile(): cannot find device profile
74.8MB-->32.2MB
badly pixellated
bookmarks TOC are gone

qpdf --linearize:

very fast, a few seconds
no size change
bookmarks TOC are gone

pdf2ps:

took very long time
output_pdf2ps.ps 74.8MB-->331.6MB

ps2pdf:

pretty fast
74.8MB-->79MB
very slightly degraded with sl. bluish background
bookmarks TOC are gone
 16
Author: hmj6jmh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-09-07 22:22:21

Si el tamaño del archivo sigue siendo demasiado grande, podría ayudar a usar ps2pdf para reducir la resolución del archivo pdf producido:

pdf2ps input.pdf tmp.ps
ps2pdf -dPDFSETTINGS=/screen -dDownsampleColorImages=true -dColorImageResolution=200 -dColorImageDownsampleType=/Bicubic tmp.ps output.pdf

Ajuste el valor de la opción -dColorImageResolution para lograr un resultado que se ajuste a sus necesidades (el valor describe la resolución de la imagen en DPIs). Si su archivo de entrada está en escala de grises, reemplazar Color a Gray o usar ambas opciones en el comando anterior también podría ayudar. Más ajuste es posible cambiando el -dPDFSETTINGS opción a /default o /impresora. Para explicaciones de todas las opciones posibles consulte el manual ps2pdf .

 14
Author: Dominik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-17 13:28:09

Después de probar gpdf como nullglob sugirió, encontré que obtuve los mismos resultados de compresión (un archivo de ~900mb hasta ~30mb) con solo usar la impresora cups-pdf. Esto podría ser más fácil/preferido si ya está viendo un documento y solo necesita comprimir uno o dos documentos.

En Ubuntu 12.04, puede instalar esto por

sudo apt-get install cups-pdf

Después de la instalación, asegúrese de comprobar en Herramientas del sistema > Administración > Impresión > haga clic con el botón derecho en 'PDF' y configure para'habilitar'

De forma predeterminada, la salida se guarda en una carpeta llamada PDF en su directorio personal.

 3
Author: ryanjdillon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:26:20

No vi mucha reducción en el tamaño del archivo usando qpdf. La mejor manera que encontré es después de pdftk se hace uso ghostscript para convertir pdf a postscript y luego volver a pdf. En PHP usarías exec:

$ps = $save_path.'/psfile.ps';
exec('ps2ps2 ' . $pdf . ' ' . $ps);
unlink($pdf);
exec('ps2pdf ' .$ps . ' ' . $pdf);
unlink($ps);

Usé esto hace unos minutos para tomar la salida pdftk de 490k a 71k.

 1
Author: Tom,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-28 02:26:34

pdf2ps large.pdf small.pdf es suficiente, en lugar de en dos pasos

pdf2ps large.pdf very_large.ps 
ps2pdf very_large.ps small.pdf
 1
Author: Lee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-08 15:26:59

La opción pdf2ps de una línea (por Lee) en realidad aumentó el tamaño del pdf. Sin embargo, los dos pasos uno lo hizo mejor. Y se puede combinar en uno solo usando la redirección de & a entrada/salida estándar y tuberías:

Pdf2ps grande.pdf | ps2pdf - pequeño.pdf

Redujo un PDF generado por xsane de 18 Mo a 630 ko!

Los enlaces se pierden, pero para el presente ejemplo, no es una preocupación... y fue la forma más fácil de lograr el resultado deseado.

 0
Author: E. Curis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-04 21:01:12

En caso de que desee comprimir un PDF que contiene una gran cantidad de texto seleccionable, en Windows puede utilizar NicePDF Compressor - elija la opción "Flate". Después de probar todo (cpdf, pdftk, gs) finalmente me ayudó a comprimir mi PDF de 1360 páginas de 500 MB a 10 MB.

 -1
Author: solf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-03 11:09:26

Tuve el mismo problema y utilicé esta función para comprimir páginas individuales, lo que resulta en que el tamaño del archivo se comprima hasta 1/3 del tamaño original.

for (int i = 1; i <= theDoc.PageCount; i++)
{
       theDoc.PageNumber = i;
       theDoc.Flatten();
}
 -2
Author: Gabbar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-04-11 15:33:03