opción de compresión pdftk


94

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

pdftk file1.pdf output file2.pdf compress

Funciona a medida que disminuye el peso de mi archivo.

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

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


1
Desde mi experiencia, depende de lo que haya dentro de su pdf. Si es un gráfico con muchos puntos, por ejemplo, la mejor solución es convertir el gráfico a png e incluir este png en el pdf.
RockScience

Respuestas:


123

Tuve el mismo problema y encontré dos soluciones diferentes (consulte este hilo para obtener 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 de forma ligeramente diferente):

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

Editar : acabo de descubrir otra opción (para la compresión sin pérdidas), que evita el desagradable comando gs. qpdf es una excelente herramienta 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

3
Increíble. gs funcionó para mí, convirtiendo un archivo de 4 MB a 339K. Hubo una pérdida de calidad, pero sirvió suficientemente a mi propósito.
Sridhar Sarnobat

27
Puede utilizar la configuración de PDF de "impresora" para una mejor calidad:gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.5 -dPDFSETTINGS=/printer -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf input.pdf
imriss

10
Para ajustar la calidad (y por lo tanto el tamaño), varíe el valor de PDFSETTINGS. Ver ghostscript.com/doc/current/Ps2pdf.htm#Options
1in9ui5t

6
Tenga en cuenta que el gscomando en la respuesta no es exactamente sin pérdidas, ya que reduce la resolución y la calidad de los JPG incrustados. Pero es re sin pérdidas. texto, manteniéndolo como texto, mientras que el convertcomando lo convierte en gráficos rasterizados.
tanius

14
La opción de configuración -dPDFSETTINGS=a me /ebookda un resultado muy agradable: seguro, está comprimido y algunos artefactos jpg son visibles, pero es totalmente legible para un tamaño razonable. ¡Gracias!
Joël

35

este procedimiento funciona bastante bien

pdf2ps large.pdf very_large.ps

ps2pdf very_large.ps small.pdf

darle una oportunidad.


8
Ésta no es una solución general. En muchos casos, el pdf resultante es más grande.
Rotskoff

4
Esto funcionó mejor de todas las soluciones mencionadas para mí. Algunas imágenes grandes bajaron de 23 MB a 1,4 MB con, con mucho, la menor pérdida de calidad.
AerandiR

1
@rotskoff Probablemente no haya una solución general porque hay diferentes tipos de documentos. Sin embargo, veo tu punto. Sería bueno tener un software que averigua qué funciona mejor para nosotros.
tiktak

Gracias, esto funcionó para mí, mientras que qpdf y gs no redujeron el tamaño del archivo de salida.
sebastian

1
Como se mencionó aquí, otro inconveniente de este método es que romperá los enlaces URL dentro del documento.
ptomato

31

Intentando comprimir un PDF que hice con tiffs de 400ppi, en su mayoría de 8 bits, algunos de 24 bits, con compresión PackBits, usando tiff2pdfcomprimido con Zip / Deflate. Un problema que tuve con cada uno de estos métodos: ninguno de los métodos anteriores conservaba el TOC de marcadores que creé minuciosamente manualmente en Acrobat Pro X. Ni siquiera la ebookconfiguración recomendada para gs. Claro, podría abrir una copia del original con el TOC intacto y hacer un Replace pagespero, lamentablemente, ninguno de estos métodos funcionó satisfactoriamente para empezar. O redujeron tanto el tamaño que la calidad quedó inaceptablemente pixelada, o no redujeron el tamaño en absoluto y, en un caso, 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

2
Esta es una investigación extremadamente valiosa (¡gracias!), Pero tampoco es una respuesta que por un momento pensé en rechazarla.
ndemou

3
¿Cómo no es una respuesta?
hmj6jmh

22

Si el tamaño del archivo aún es demasiado grande, podría ayudar el uso de 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 DPI). Si su archivo de entrada está en escala de grises, reemplazar Color por Gris o usar ambas opciones en el comando anterior también podría ayudar. Es posible realizar un ajuste más fino cambiando la opción -dPDFSETTINGS a / default o / printer . Para obtener explicaciones de todas las opciones posibles, consulte el manual de ps2pdf .


1
Gracias por la propina. Con -dPDFSETTINGS pude reducir el tamaño de mi PDF escaneado
eshwar

2
GRACIAS. No creo que haya una solución general para el caso de uso de todos, ¡pero probé casi todas las soluciones en este hilo y esta es la única que funcionó para mí! Ser capaz de "ajustar" el parámetro dColorImageResolution era clave: tenía que obtener el tamaño del documento lo suficientemente pequeño para que este sitio gubernamental lo aceptara, pero lo suficientemente grande para ser legible. Gracias, tío Sam, por otro doloroso aro que atravesar :)
Michael Klear

4

Después de probar gpdf como sugirió nullglob , descubrí que obtuve los mismos resultados de compresión (un archivo de ~ 900mb hasta ~ 30mb) simplemente usando 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 verificar en Herramientas del sistema > Administración > Impresión > haga clic con el botón derecho en 'PDF' y configúrelo en 'habilitar'

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


4

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

pdf2ps large.pdf - | ps2pdf - pequeño.pdf

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

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


En su ps2pdflugar, podría intentarlo , vea mi comentario a la respuesta de @ Lee.
myrdd

3

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

pdf2ps large.pdf very_large.ps 
ps2pdf very_large.ps small.pdf

Sin embargo, ps2pdf large.pdf small.pdfes una mejor opción.

  • ps2pdf es mucho mas rapido
  • sin parámetros adicionales especificados, a pdf2psveces produce un archivo más grande.

¿Dónde encontraste esta opción? ¿Es una característica de alguna versión reciente? No funciono para mí. Aunque nombré el archivo de salida out.pdf, se convirtió en un archivo PS ( mimetype out.pdfdice out.pdf: application/postscript).
myrdd

la mía es la versión más reciente 9.xx. no estoy seguro de tu.
Lee

Estoy usando la versión empaquetada estable de Debian ("stretch"), que es 9.25. ¿Podría verificar si realmente tiene un archivo pdf escribiendo mimetype small.pdf?
myrdd

la salida de mimetype small.pdfes small.pdf: application/pdf. Creo que el programa puede determinar el tipo de archivo automáticamente según el sufijo.
Lee

1
@myrdd sí, hice pruebas. ps2pdfes mejor.
Lee

1

No vi mucha reducción en el tamaño del archivo usando qpdf. La mejor manera que encontré es que después de que pdftk haya terminado, use 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 de pdftk de 490k a 71k.


2
PHP añade una complejidad innecesaria y completamente estrecha la aplicabilidad de esta respuesta
ndemou

-2

Tuve el mismo problema y utilicé esta función para comprimir páginas individuales, lo que da como resultado 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();
}

1
¿está utilizando la biblioteca C ++ de pdftk?
RockScience

-3

En caso de que desee comprimir un PDF que contenga una gran cantidad de texto seleccionable, en Windows puede usar 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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.