61

I have a pdf file that contains images and I want to reduce its size in order to upload it to a site with a size limit.

So, how can I reduce the size of a pdf file from the command-line?

1

5 Answers 5

74

You can use gs - GhostScript (PostScript and PDF language interpreter and previewer) as follows:

  • Set pdfwrite as output device by -sDEVICE=pdfwrite
  • Use the appropriate -dPDFSETTINGS.

From Documentation:

-dPDFSETTINGS=configuration
Presets the "distiller parameters" to one of four predefined settings:

  • /screen selects low-resolution output similar to the Acrobat Distiller "Screen Optimized" setting.
  • /ebook selects medium-resolution output similar to the Acrobat Distiller "eBook" setting.
  • /printer selects output similar to the Acrobat Distiller "Print Optimized" setting.
  • /prepress selects output similar to Acrobat Distiller "Prepress Optimized" setting.
  • /default selects output intended to be useful across a wide variety of uses, possibly at the expense of a larger output file.

Example:

$ du -h file.pdf 
27M file.pdf
$ gs -sDEVICE=pdfwrite -dPDFSETTINGS=/ebook -q -o output.pdf file.pdf
$ du -h output.pdf 
900K    output.pdf

Here -q suppress normal startup messages, and also do the equivalent of -dQUIET which suppresses routine information comments

4
  • 2
    Doesn't work for me. A searchable PDF output by tesseract remains completely unchanged when attempting to shrink it with this command. Dec 30, 2019 at 17:44
  • We can also use -compress jpeg -quality 50 type of workaround (additionally -resize 75%) with convert command.
    – Pandya
    May 23, 2020 at 10:50
  • Wow, finally, a solution to this problem. Jul 25, 2022 at 10:52
  • 1
    If your current pdf page size is large, you might also need to shrink it down to normal A4 size with addional options -sPAPERSIZE=a4 -dPDFFitPage because /ebook etc. only shrinks it according to page size
    – phil294
    Mar 17, 2023 at 3:43
16
ps2pdf input.pdf output.pdf

I got the answer from ask ubuntu and it worked for me. It actually reduced 18.1Mb to 1.0Mb

2
  • 2
    Doesn't work for me. A searchable PDF output by tesseract remains completely unchanged when attempting to shrink it with this command. Dec 30, 2019 at 17:46
  • 2
    This is awesomely simple if you don't care to choose all the options that GhostScript needs. The man pages say that the script accepts the same parameters as gs, it gives this example: ps2pdf -dPDFSETTINGS=/prepress figure.ps proof.pdf Apr 28, 2020 at 23:11
4

If the PDF file consists entirely of image data;

pdftk inputFile.pdf burst
mogrify -density 300 -format jpg -quality 20 pg_*.pdf 
convert *.jpg -auto-orient outputFile.pdf

The density value can match the density of the source image (eg 300 dpi), but the jpeg quality should be lower than the source image (e.g. 20).

2

Following a pair of recipes derived from the answers of @freeman, @Pandya, and the comments of @CrisLuengo and @Phil294:

ps2pdf -dPDFSETTINGS=/ebook in.pdf out.pdf

in this case, the IMGs are reduced according to the size of output.

If your intention is to produce an output of a different size (Ex make a a4.pdf from a A2 Poster) you may provide extra options:

ps2pdf -sPAPERSIZE=a4 -dPDFFitPage -dPDFSETTINGS=/ebook a2poster.pdf a4out.pdf 

See man gs for more options.

1

You can try this :

$ 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

It is faster than gs but compresses upto 30% in this case for a 107.5MiB input file.

2
  • 4
    Doesn't work for me. A searchable PDF output by tesseract remains completely unchanged when attempting to shrink it with this command. Dec 30, 2019 at 17:47
  • This only restores the regular PDF page stream compression if the file happens to be in uncompressed (textual) format. Won't do much usually. Jan 23, 2022 at 19:27

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .