¿Cómo puedo reducir el tamaño de archivo de un archivo PDF escaneado?


374

Tengo un archivo PDF de 72.9MB que necesito reducir a menos de 500 KB.

El archivo era una imagen JPEG que había escaneado y luego convertido a pdf.


1
depende de lo que consuma el espacio ... necesita mucha más información. comprimir el espacio de la imagen podría ayudar, pero si está probando un gran montón de archivos, no funcionará. En serio necesito más información.
RobotHumans

1
conviértalo a DjVu, en lugar de intentar reducir a PDF de tamaño imposible (según la fuente)
zetah

el archivo era una imagen jpeg que había escaneado y luego convertido a pdf.
tamimym

Solo parece ayudar un poco al tamaño del archivo, pero pdfopttiene una sintaxis simple y mejora la carga y la velocidad de cambio de página en la era del iPad. :-)
Ari B. Friedman

1
PDF a PS no es efectivo en archivos PDF escaneados, trato de convertir 56 MB de pdf en archivos ps pero el archivo ps se convierte en 1.3 GB y nuevamente ps2pdf se convierte en un archivo de 45 MB

Respuestas:


145

aking1012 es correcto. Con más información sobre posibles imágenes incrustadas, hipervínculos, etc., sería mucho más fácil responder esta pregunta.

Aquí hay un par de scripts y soluciones de línea de comandos. Úselo como mejor le parezca.


15
Muchas gracias por sus sugerencias, el shell ghostscript funcionó de maravilla y lo redujo a
460 KB

Eso no es necesariamente cierto. Si el contenido pasó de una imagen a texto, eso es más que fessible. [Eso es asumiendo que el texto está correctamente oculto]
monksy

2
Le recomiendo el script shrinkpdf.sh, puede personalizar el código para usar el valor ppi que desee (72 por defecto) y alcanzar exactamente el tamaño de archivo que necesita para sacrificar la menor calidad. Esto me permitió cargar un documento escaneado de 11 MB con un máximo. tamaño de 3 MB sin perder mucha calidad.
Severo Raz

44
¡shrinkpdf funciona muy bien!
AmanicA

2
¿Dónde está el shell ghostscript al que se refiere el OP en askubuntu.com/questions/113544/… ?
user13107

523

Use el siguiente comando ghostscript :

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf input.pdf
  • -dPDFSETTINGS=/screenBaja calidad, menor tamaño. ( 72 ppp )
  • -dPDFSETTINGS=/ebookpara una mejor calidad, pero archivos PDF un poco más grandes. ( 150 ppp )
  • -dPDFSETTINGS=/prepresssalida similar a la configuración "Preimpresión optimizada" de Acrobat Distiller ( 300 ppp )
  • -dPDFSETTINGS=/printerselecciona una salida similar a la configuración "Impresión optimizada" de Acrobat Distiller ( 300 ppp )
  • -dPDFSETTINGS=/default selecciona la salida destinada a ser útil en una amplia variedad de usos, posiblemente a expensas de un archivo de salida más grande

55
Esta debería ser la respuesta aceptada. ghostscript es la implementación de PDF, XPS y PS para unices y puede hacer básicamente todo lo que ofrece la mejor calidad ...
dom0

77
@Sina: en realidad hay un script Nautilus con una interfaz gráfica de usuario simple basada en Zenity que utiliza este comando gs con todas sus opciones de nivel de calidad: launchpad.net/compress-pdf
Sadi

37
Esta es la respuesta correcta para esta pregunta (comprimir un pdf que es principalmente datos de mapa de bits). Descubrí que la screenconfiguración era de muy baja calidad para mí, pero ebookfuncionó bien, reduciendo un PDF basado en escaneo de 33Mb a 3.6Mb y manteniéndolo muy legible. -dPDFSETTINGSAquí se enumeran otras opciones para la opción: milan.kupcevic.net/ghostscript-ps-pdf , y podría ser una buena idea incluirlas en esta respuesta.
naught101

55
gs parámetros de configuración disponibles: ghostscript.com/doc/current/Ps2pdf.htm
Antonios Hadjigeorgalis

3
el 17.10 hizo 42 mb pdf a 127 mb :(
YaSh Chaudhary

157

Mi forma favorita de hacer esto es convertir el pdf a ps y viceversa. Sin embargo, no siempre funciona, pero cuando funciona, los resultados son buenos:

ps2pdf input.pdf output.pdf

Esto también funciona directamente en pdf, como se sugiere en los comentarios.

Algunos usuarios también informan más éxito al usar la configuración del libro electrónico de la siguiente manera:

ps2pdf -dPDFSETTINGS=/ebook input.pdf output.pdf 

44
Esta es una forma muy simple y efectiva de hacerlo. Me sorprendió ver cuánto este método comprimió los archivos. ¡Gracias!
Gabriel

16
A pesar de que este enfoque se convirtió en mi solución favorita para comprimir archivos pdf, rompe los enlaces de URL que puede tener el documento (lo que no sucede con el enfoque de @Michael D). ¡Aparte de eso, lo increíble es todo lo que puedo pensar en ejecutar este fragmento! (:
Rubens

1
@Rubens Ah. No sabía sobre el hecho de que rompe los enlaces url. Gracias por agregar eso.
don.joey

3
Esto pasa por alto la protección de contraseña ... solo diciendo
jojo

8
ps2pdf tomará los archivos PDF como entradas, por lo que puede hacer esto en un solo paso:ps2pdf intput.pdf output.pdf
frabjous

127

Si tiene un pdf con imágenes escaneadas , puede usarlo convertpara crear un pdf con compresión jpeg (puede usar este método en cualquier pdf, pero perderá toda la información del texto).

Por ejemplo:

convert -density 200x200 -quality 60 -compress jpeg input.pdf output.pdf

Ajuste la densidad (por ejemplo, 100x100) y la calidad a sus necesidades.

Dependiendo de su entrada, la compresión jpeg podría no ser la mejor opción debido a los artefactos de compresión. Puede elegir entre BZip, Fax, Group4, JPEG, JPEG2000, Lossless, LZW, RLE o Zip como métodos de compresión alternativos (algunos solo permiten imágenes en blanco y negro). Para más detalles ver aquí .

Pude lograr excelentes relaciones de compresión para documentos escaneados / fotografiados (dependiendo de la configuración). Dependiendo de la fuente del documento, es posible que desee reducir la profundidad del color ( -depthargumento).


3
Para un documento escaneado donde el texto es lo que le interesa en lugar de las imágenes y preservar la profundidad no es un problema, la compresión JPEG no es una buena idea porque los artefactos tienden a ser extremadamente notables. Si se utiliza pdfimages input.pdf pagespara extraer los archivos de PBM, entonces usted puede hacer algo como: for page in *.pbm; do convert $page -compress Group4 -type bilevel TIFF:- | convert - output.pdf. Cualquier OCR se perderá, así que generalmente lo hago pdfsandwich output.pdf, lo que parece reducir aún más el tamaño del archivo.
Brian Z

1
@BrianZ seguro de compresión JPEG no siempre es la mejor opción, pero para mí fue el mejor enfoque para documentos de tipo mixto. Agregué algunas informaciones sobre otros métodos de compresión a la respuesta.
algún

2
Este método finalmente se usa gsdetrás de escena.
alfC

2
Tuve que usar doble guión para las opciones para ejecutar el comando --density --quality --compressvs -density -quality -compress.
Rotareti

1
Si la calidad de imagen no es la mayor preocupación (y solo desea que ese archivo adjunto de correo electrónico sea lo suficientemente pequeño como para enviarlo) -resize 50%, también puede agregar uno , cambie el porcentaje según la cantidad de DPI que se usó durante el escaneo
chrki

41

Necesitaba reducir el tamaño de un PDF que contenía escaneos a todo color de un documento. Cada una de mis páginas era una imagen a todo color en lo que respecta al archivo. Eran imágenes de páginas que contenían texto e imágenes, pero fueron creadas escaneando a una imagen.

Usé una combinación del siguiente comando ghostscript y uno de otro hilo.

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dDownsampleColorImages=true \
-dColorImageResolution=150 -dNOPAUSE  -dBATCH -sOutputFile=output.pdf input.pdf

Esto redujo la resolución de la imagen a 150 ppp, reduciendo el tamaño de mi archivo a la mitad. Al mirar el documento, casi no hubo una pérdida notable de calidad de imagen. El texto sigue siendo perfectamente legible en mi Nexus7 2012.


3
+1 para imágenes de muestreo descendente pero manteniendo el texto como vectores. Hice una gran diferencia de lado sin hacer que mi texto se pixelara.
Jason O'Neil

Fantástico que uno pueda ajustar la resolución con este comando; esto me dio mejores resultados que simplemente usar dPDFSETTINGS = \ screen
intercambio

29

Aquí hay un script para reescribir archivos PDF escaneados:

#!/bin/sh

gs  -q -dNOPAUSE -dBATCH -dSAFER \
    -sDEVICE=pdfwrite \
    -dCompatibilityLevel=1.3 \
    -dPDFSETTINGS=/screen \
    -dEmbedAllFonts=true \
    -dSubsetFonts=true \
    -dColorImageDownsampleType=/Bicubic \
    -dColorImageResolution=72 \
    -dGrayImageDownsampleType=/Bicubic \
    -dGrayImageResolution=72 \
    -dMonoImageDownsampleType=/Bicubic \
    -dMonoImageResolution=72 \
    -sOutputFile=out.pdf \
     $1

Puede personalizarlo un poco para hacerlo más reutilizable, pero si solo tiene un pdf, puede reemplazarlo $1con su nombre de archivo pdf y ponerlo en un terminal.


1
Funciona de maravilla, gracias Oli. Has respondido casi todo lo que he preguntado aquí hasta ahora :-D
Rob Cowell

Esta es una buena respuesta, pero en mi caso al menos toma mucho tiempo convertir un archivo PDF algo grande (> 10Mb) (más de un minuto).
Gabriel

No estoy seguro de lo que sucede, pero un PDF de 30 MB da como resultado un archivo de 68 MB. En lugar de reducir, se agranda. Misma salida si se usa directamente ps2pdf como se indica en la siguiente respuesta.
Ed Villegas

@EdVillegas Lo único en lo que puedo pensar (para explicar ese tipo de aumento) es que las imágenes tienen una resolución más baja que las que se generan (72 ppp). O de alguna manera incrustar las fuentes está absorbiendo todas las fuentes.
Oli

21

Usualmente uso ps2pdf para hacer esto (sintaxis más fácil), algo como esto:

ps2pdf -dPDFSETTINGS=/ebook BiggerPdf SmallerPDF

Utilizo el siguiente script de Python para reducir el tamaño de todos los archivos pdf en un directorio en un servidor de producción (8.04). Entonces debería funcionar.

#!/usr/bin/python

import os

for fich in os.listdir('.'):
        if fich[-3:]=="pdf":
                os.system("ps2pdf -dPDFSETTINGS=/ebook %s reduc/%s" % (fich,fich))

Gracias por la solución alternativa. Primero probé con Oli y me dio el resultado que necesitaba, pero también lo guardaré para referencia futura.
Rob Cowell

1
-dPDFSETTINGS = / la opción de impresora cambia el tamaño al 50%. ebook hacer 90% de cambio de tamaño.
neouyghur

17
  1. Yo uso LibreOffice Draw para abrir el pdf.
  2. Luego "exporto como pdf"
  3. Y configure la "calidad de compresión JPEG" al 50% y la "resolución de imagen" a 150 ppp

Esto tendrá un buen resultado.


¡La peor solución posible al problema! ¡Totalmente arruinó mi archivo!

9

Lo mejor para mí fue

convert -compress Zip -density 150x150 input.pdf output.pdf

Otras maneras:

#### gs
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf $INPUTFILE

### pdf2ps && ps2pdf
pdf2ps input.pdf output.ps && ps2pdf output.ps output.pdf

### Webservice
http://compress.smallpdf.com/de

Saludos


Gran solución Fácil de recordar y trajo mi pdf de 32 a 3.5 MB sin pérdida sensible de legibilidad.
Immanuel Weihnachten

Me gustó la segunda forma pdf2ps input.pdf temp.ps && ps2pdf14 temp.ps output.pdf && rm temp.ps
McPeppr el

5

Acabo de encontrar este problema yo mismo. Si usa un escaneo simple, seleccione el modo de texto para escaneos de baja resolución y no tendrá que preocuparse por las cosas de la línea de comandos. Solo digo.


1
Esta es la única respuesta en este hilo que resolvió mi problema. Le resté importancia a Simplescan, pero realmente fue la respuesta para mí, en lugar de luchar contra Xsane en lo que parecía ser una agonía interminable.
versvs

4

Controlar la calidad de compresión:

#!/bin/sh
INPUT=$1; shift
OUTPUT=$1; shift
GS_BIN=/usr/bin/gs
QFACTOR="0.40"

# Image Compression Quality
#
# Quality HSamples VSamples QFactor
# Minimum [2 1 1 2] [2 1 1 2] 2.40
# Low     [2 1 1 2] [2 1 1 2] 1.30
# Medium  [2 1 1 2] [2 1 1 2] 0.76
# High    [1 1 1 1] [1 1 1 1] 0.40
# Maximum [1 1 1 1] [1 1 1 1] 0.15 

${GS_BIN} -dBATCH -dSAFER -DNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=${OUTPUT} -c "<< /ColorImageDict << /QFactor ${QFACTOR} /Blend 1 /HSample [1 1 1 1] /VSample [1 1 1 1] >> >> setdistillerparams" -f ${INPUT}

... entonces, ¿INPUT y OUTPUT son el mismo argumento? Es posible que desee agregar pautas de uso.
mikewhatever

2
Tenga en cuenta el shift. El primer parámetro es el archivo de entrada, el segundo es el archivo de salida y el resto de los parámetros se pasarán gstal cual.
Mikko Rantalainen

Creo que quiere / HSample sy / VSample s , no / HSample y / VSample. Consulte, por ejemplo, documentos de ps2pdf o el manual de referencia del lenguaje PostScript. También vale la pena señalar que el rango permitido de QFactor es de 0 a 1,000,000 y que los valores más bajos producen una calidad más alta.
Pont

3

Dado que este enlace fue el primero para mí cuando busqué en Google, pensé en agregar una posibilidad más. Ninguna de las soluciones anteriores funcionaba para mí en un pdf exportado desde Inkscape (15 mb), pero finalmente pude reducirlo a 1 mb abriéndolo en GIMP y exportando como pdf nuevamente.

Otra opción que se acercó (pero el texto era un poco borroso) fue la utilidad de conversión de ImageMagick:

convert -compress Zip input.pdf output.pdf

Supongo que esto es lo que quisiste decir con "un poco borroso", pero solo para aclarar, convert -compress Zipparecía rasterizar todos los vectores.
Sparhawk


3

Recomiendo encarecidamente pdfsizeopt .

Es mucho más eficiente en términos de reducción de tamaño de cualquiera de los programas CLI y GUI anterior que he intentado (incluyendo convert, gs, pdftk, etc.) - aunque posiblemente más lento con pngoutactivado -, y no tiene algunos de sus temas (sin fuertemente imágenes pixeladas / degradadas, sin pérdida de marcadores, etc.).

Ahora, si necesita alcanzar un cierto tamaño, independientemente de las consecuencias (por ejemplo, degradar las imágenes hasta un punto de imposibilidad de lectura), puede que no sea la herramienta que necesita, sino como una solución siempre activa para reducir los tamaños innecesarios. en PDF sin perder legibilidad, información y calidad de imagen aceptable, creo que es la mejor opción. (Nota: tiendo a usarlo después de haber realizado primero un OCR de vectorización en Adobe Acrobat [la función solía llamarse "CleanScan"], que puede tener un impacto dramático en el tamaño de algunos documentos de texto escaneados).


Recomiendo la instalación genérica de Unix :

  1. Instale todas las dependencias requeridas:

  2. Descargue e instale el ejecutable:

    curl -L -o https://raw.githubusercontent.com/pts/pdfsizeopt/master/pdfsizeopt.single
    cp pdfsizeopt.single /usr/local/bin/pdfsizeopt
    

Uso:

pdfsizeopt original.pdf [compressed.pdf]

Nota para los usuarios de Mac que encuentren esta publicación (o usuarios de Linuxbrew): hay una fórmula de instalación de Homebrew:

brew install --HEAD pts/utils/pdfsizeopt

2

Estaba enfrentando el mismo problema y me alegré de encontrar este hilo. Específicamente tuve un pdf generado a partir de imágenes escaneadas, y necesitaba reducir su tamaño de byte en un factor de 6.

Desafortunadamente, ninguna de las soluciones anteriores funcionó :(. Luego me di cuenta de que en algún lugar del proceso de escáner-> jpeg-> pdf el tamaño de la página se había hinchado por un factor de aprx 4. Los documentos que escaneé eran todos de tamaño Carta, pero el pdf tenía un tamaño de

identify -verbose doc_orig.pdf | grep "Print size"
 Print size: 35.4167x48.7222

Finalmente obtuve los resultados deseados con un comando "convertir" que hizo tanto el cambio de tamaño como los pasos de compresión en uno:

convert -density 135x135 -quality 70 -compress jpeg -resize 22.588% doc_orig.pdf doc_lowres.pdf

Tenga en cuenta que doc_orig tenía una densidad de 72x72 ppp.


1

Si la conversión a djvu también estaría bien y si no hay colores involucrados, puede intentar lo siguiente:

Convierte los archivos pdf a jpg usando pdfimages -j

Si en su lugar obtienes archivos pbm, debes hacer el paso intermedio:

for FILENAME in $(ls *.pbm); do convert $FILENAME ${FILENAME%.*}.jpg ;done

El comando de conversión es del paquete imagemagick.

Luego use scantailor para hacer tif de él.

En un último paso, vaya al directorio de escantadores (donde se encuentran los tif) y aplique djvubind a ese directorio.

Esto debería reducir drásticamente el tamaño del archivo sin una gran pérdida de calidad del texto. Si desea un control más fino sobre el backend ocr, puede intentar djvubind --no-ocrusar ocrodjvu para agregar la capa ocr después.

Si tiene colores en su documento, las cosas se vuelven un poco más complicadas. En lugar de djvubind , puede usar didjvu y en scantailor debe cambiar al modo mixto y seleccionar a veces imágenes en color manualmente.


1

cargar imagen o incluso archivo pdf en inkscape.

Desde inkscape: guarde en formato vectorial (como el .svg nativo).

Importe archivos vectoriales a scribus, edite el diseño y exporte / guarde como .pdf desde allí


0

Herramienta de compresión de PDF súper simple: página de GitHub.

Instalación en Ubuntu:

sudo add-apt-repository ppa:jfswitz/released

sudo apt-get update

sudo apt-get install pdf-compressor

Utiliza ghostscript.


0

Puedes probar esto:

$ time pdftk myFile.pdf output myFile__SMALLER.pdf compress
GC Warning: Repeated allocation of very large block (appr. size 16764928):
    May lead to memory leak and poor performance.
GC Warning: Repeated allocation of very large block (appr. size 8384512):
    May lead to memory leak and poor performance.
GC Warning: Repeated allocation of very large block (appr. size 11837440):
    May lead to memory leak and poor performance.
GC Warning: Repeated allocation of very large block (appr. size 8384512):
    May lead to memory leak and poor performance.
GC Warning: Repeated allocation of very large block (appr. size 33525760):
    May lead to memory leak and poor performance.
GC Warning: Repeated allocation of very large block (appr. size 7254016):
    May lead to memory leak and poor performance.
GC Warning: Repeated allocation of very large block (appr. size 34041856):
    May lead to memory leak and poor performance.
GC Warning: Repeated allocation of very large block (appr. size 33525760):
    May lead to memory leak and poor performance.

real    0m23.677s
user    0m23.142s
sys     0m0.540s
$ du myFile*.pdf
108M    myFile.pdf
74M     myFile__SMALLER.pdf

Es más rápido gspero comprime hasta un 30% en este caso para un archivo de entrada de 107.5MiB.


0

Para mí, la screenopción gs era demasiado mala y la ebookdemasiado grande.

Mi documento original contenía texto en color e imágenes en blanco y negro (dependiendo de la página).

La mejor solución que encontré fue:

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dDownsampleColorImages=true -dDownsampleGrayImages=true -dDownsampleMonoImages=true -dColorImageResolution=130 -dGrayImageResolution=130 -dMonoImageResolution=130 -r130 -dNOPAUSE  -dBATCH -sOutputFile=output_lr.pdf input.pdf

Tenga en cuenta que el nivel de compresión no es lineal ... si estaba especificando 135 no comprimido, encontré que 130 es (en mi caso) la resolución máxima que logra una compresión.


-1

Usé los siguientes comandos pero no comprimió mi archivo pdf sustancialmente. Algunas veces parte de la porción se ennegreció después de la compresión.

  1. gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf $INPUTFILE

  2. "ps2pdf -dPDFSETTINGS=/ebook %s %s" % (input_file_path, out_file_path)

Después de mucho deambular por la web, simplemente no pude encontrar la biblioteca de compresión correcta. Me encontré pdfcompressor.com. Este es un sitio web increíble. Comprime el pdf en un 95% (15Mb de archivos). Así que usé selenio y Tor para automatizar la compresión. Echa un vistazo a mi repositorio de Github. [GITHUB] ( https://github.com/gugli28/PdfCompressor )

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.