Cambiar el tamaño del lote y comprimir archivos PDF

15

Necesito una forma de reducir el tamaño y comprimir lotes de archivos PDF. Preferiría hacer esto en Windows, pero Linux estaría bien si significara un flujo de trabajo más fluido.

Sé que hay programas como NitroPDF y Acrobat que le permiten lograr esto, pero me temo que tendría que hacerse archivo por archivo. Estos programas tampoco son baratos y preferiría no comprarlos solo para poder usar una o dos funciones.

Información general: utilizo CamScanner para digitalizar recibos y facturas para ingresar en cuentas (FreeAgent). Los archivos PDF de CamScanner son todos de tamaño A4 y los de varias páginas a menudo superan el límite de archivos adjuntos de 2 MB.

Stan
fuente

Respuestas:

15

Estoy sugiriendo una herramienta de línea de comandos aquí, que se puede agrupar fácilmente con bucles en lenguajes de script incorporados en Windows, Linux, OS X, etc.


ImageMagick admite archivos PDF y tiene una resizeopción con su herramienta de conversión . Nunca lo he usado personalmente, pero puedes intentar jugar con eso.

También puede usar la compressopción (hay un ejemplo aquí ):

Girar un PDF

$ convert -rotate 270 -density 300x300 -compress lzw in.pdf out.pdf

Esto supone un PDF respaldado por TIFF. El parámetro de densidad es importante porque, de lo contrario, ImageMagick reduce la muestra (por alguna razón). Agregar la opción de compresión ayuda a mantener el tamaño general del PDF más pequeño, sin pérdida de calidad.

Para PDF de varias páginas, es posible que desee usar pdftk, luego use mogrifydesde ImageMagick para convertir cada página en su lugar:

$ pdftk in.pdf burst
$ mogrify -rotate 270 -density 300x300 -compress lzw pg_*.pdf
$ pdftk pg*.pdf cat output out.pdf
$ rm pg*.pdf


Para convertir archivos PDF con ImageMagick, debe tener instalado GhostScript .


ImageMagick puede convertir archivos PDF de varias páginas. Si bien mogrifyse convertirá en su lugar, le recomiendo que lo use convertpara que pueda conservar los originales en caso de accidente.


He realizado algunas pruebas en el PDF de muestra proporcionado. Esto funcionó bastante bien para mí:

convert -density 200 -compress jpeg -quality 20 test.pdf test2.pdf

La densidad por defecto es 72DPI. Al configurarlo más alto podemos obtener una resolución más alta y, por lo tanto, una calidad aceptable. Se veía bien 150y era un poco más pequeño, pero si desea atender a una variedad de archivos PDF 200debería funcionar.

La compresión JPEG debe ya sea automática o elegir un nivel predeterminado a 92en una escala de 1a 100con 100ser el mejor. Estableciéndolo en 20, se ve casi tan bueno como el original (un poco más difuso y el pequeño texto en la parte inferior es un poco difícil de leer, pero originalmente era de todos modos).

Estas opciones reducen su muestra de 1.7MB a 0.5MB , mientras la mantienen legible. Puedes experimentar un poco.

Si desea un tamaño más pequeño (tanto del archivo como de la imagen / PDF), puede usar -resize #%, por ejemplo -resize 75%. Sin embargo, en su PDF de ejemplo, esto hace que la letra pequeña en la parte inferior sea casi ilegible.

Si todavía tiene poco espacio, especialmente para los PDF de varias páginas, puede comprimir aún más agregando los archivos a un archivo ZIP (u otro). Esto redujo el tamaño del archivo a 0,43 MB en ese PDF de prueba (la reducción de la calidad de compresión JPEG tiene un efecto mucho más drástico). También puede dividir el archivo PDF en páginas con pdftk, como sugirió @glallen en su edición, o dividir el archivo y recombinarlo en el otro extremo.

2 MB también es un límite de archivo adjunto bastante pequeño, es posible que desee buscar en otros proveedores de correo electrónico. De memoria, GMail proporciona más de 10 MB por correo electrónico.

Estas opciones, y más, están completamente documentadas en su sitio web .

Beto
fuente
Parece un enfoque excelente, pero no creo que mis archivos PDF estén respaldados por TIFF. CamScanner primero toma fotos JPEG y luego las convierte a PDF para exportarlas. El procesamiento de estos archivos PDF parece disminuirlos como indica la publicación del blog, sin importar la compresión. La conversión de PDF a TIFF y luego nuevamente a PDF parece preservar la calidad, pero infla el tamaño del archivo y arruina el tamaño y la densidad de la página.
Stan
@paganompu Según tengo entendido, desea reducir el tamaño del archivo. ¿Qué hay de comprimir como JPEG? ¿Cómo resizeresultó? ¿Tienes un archivo de muestra (no sensible) con el que podamos jugar? ¿Es aceptable el muestreo descendente?
Bob
JPEG hubiera estado bien, pero necesito cargar documentos de varias páginas y solo puedo tener un archivo adjunto por entrada de cuenta. La disminución de resolución es severa: este documento de prueba es ilegible después de la conversión con compresión sin pérdidas.
Stan
@paganompu Yo mismo experimenté un poco y actualicé la respuesta con un comando de trabajo. Vea aquí para una prueba en su archivo.
Bob
Ese comando funciona como un encanto. Parece que mi "disminución de resolución" se debió a la omisión density... ¡Juro que puedo leer y seguir las instrucciones! Poco avergonzado ahora: S Gracias por tomarse el tiempo para ayudarme Bob
Stan
19

Entonces, convertdesde ImageMagick producirá PDF rasterizado y muchas personas estarían interesadas en mantener intactos los gráficos vectoriales y el texto para que solo se compriman las imágenes incrustadas. Entonces, una buena alternativa para hacer la compresión es usar el gspaquete de ghostscriptejemplo de uso:

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile=out.pdf in.pdf

en el parámetro de comando anterior: -dPDFSETTINGS=/ebookes importante. Puede tener 3 valores:

-dPDFSETTINGS=/screen   (screen-view-only quality, 72 dpi images)
-dPDFSETTINGS=/ebook    (low quality, 150 dpi images)
-dPDFSETTINGS=/printer  (high quality, 300 dpi images)
-dPDFSETTINGS=/prepress (high quality, color preserving, 300 dpi imgs)
-dPDFSETTINGS=/default  (almost identical to /screen)
aNeutrino
fuente