Skip to content

aklomp/shrinkpdf

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

On a machine where the locale is set to something not equivalent to
ASCII, the call to `awk' in `get_pdf_version()' will throw the following
error:

  awk: cmd. line:1: (FILENAME=- FNR=1) warning: Invalid multibyte data
  detected. There may be a mismatch between your data and your locale.

This can be fixed by forcing the C locale by prepending the call to awk
with `LC_ALL=C'.

Reported and fixed by Laurent MUGNIER.

Resolves #15.
e0c237a

Git stats

Files

Permalink
Failed to load latest commit information.

Shrinkpdf: shrink PDF files with Ghostscript

Shellcheck Test

A simple wrapper around Ghostscript to shrink PDFs (as in reduce filesize) under Linux. Inspired by some code I found in an OpenOffice Python script (I think). The script feeds a PDF through Ghostscript, which performs lossy recompression by such methods as downsampling the images to 72dpi. The result should be (but not always is) a much smaller file.

Usage

Download the script and make it executable:

chmod +x shrinkpdf.sh

If you run it with no arguments, it prints a usage summary. If you run it with a single argument -- the name of the pdf to shrink -- it writes the result to stdout:

./shrinkpdf.sh in.pdf > out.pdf

You can provide an output file with the -o option:

./shrinkpdf.sh -o out.pdf in.pdf

And an output resolution in DPI (default is 72 DPI) with the -r option:

./shrinkpdf.sh -r 90 -o out.pdf in.pdf

Color-to-grayscale conversion can be enabled with the -g flag. This can sometimes further reduce the output size:

./shrinkpdf.sh -g -r 90 -o out.pdf in.pdf

Due to limitations of shell option handling, options must always come before the input file.

If both the input and the output are regular files, the script checks if the output is actually smaller. If not, it writes a message to stderr and copies the input over the output.

Sorry, Windows users; this one is Linux only. A Windows adaptation of this script can be found on this blog. It's a bit more user-friendly than my barebones version and also supports drag-and-drop.

License and acknowledgements

The script is licensed under the BSD 3-clause license.

I didn't invent the wheel, just packaged it nicely. All credits go to the Ghostscript team.