22

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?

30

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.
  • -o option to output file which also set -dNOPAUSE and -dBATCH (see Interaction-related parameters)

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

| improve this answer | |
  • Doesn't work for me. A searchable PDF output by tesseract remains completely unchanged when attempting to shrink it with this command. – Gabriel Staples Dec 30 '19 at 17:44
  • We can also use -compress jpeg -quality 50 type of workaround (additionally -resize 75%) with convert command. – Pandya May 23 at 10:50
5
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

| improve this answer | |
  • Doesn't work for me. A searchable PDF output by tesseract remains completely unchanged when attempting to shrink it with this command. – Gabriel Staples Dec 30 '19 at 17:46
  • 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 – Cris Luengo Apr 28 at 23:11
0

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.

| improve this answer | |
  • Doesn't work for me. A searchable PDF output by tesseract remains completely unchanged when attempting to shrink it with this command. – Gabriel Staples Dec 30 '19 at 17:47

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.