Ubuntu Tip:Howto reduce PDF file size from command line

If you want to reduce PDF file size using command line you can use ghostscript.Ghostscript is used for PostScript/PDF preview and printing. Usually as a back-end to a program such as ghostview, it can display PostScript and PDF documents in an X11 environment.

Furthermore, it can render PostScript and PDF files as graphics to be printed on non-PostScript printers. Supported printers include common dot-matrix, inkjet and laser models.

Package gsfonts contains a set of standard fonts for Ghostscript.

Use the following command syntax to reduce your pdf files

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf input.pdf

Replace your file names output.pdf,input.pdf files with your file names.

This is only example you can check man gs command for more options.

If you want to install ghostscript use the following command

sudo apt-get install ghostscript

Sponsored Link

Incoming search terms:

Related posts

43 thoughts on “Ubuntu Tip:Howto reduce PDF file size from command line

  1. “-dPDFSETTINGS=/screen” suggest that the file is optimized for screen instead of printing. If this is the case you should point out to the readers that they are making files smaller, but removing quality needed for printing.

  2. Unless this applies only to PDF files created by Adobe Acrobat (i.e. because they’re more bloated to begin with or something) I would suggest that your title should speak of “PDF file size” rather than “Adobe Acrobat file size”. Since 2008, PDF is an ISO standard and PDF viewing and creation may have nothing to do with Adobe software.

  3. Hi there, Many thanks for the tip.

    I tried reducing a PDF file of a scanned document of 2.5Mb, but the result was unreadable. (filesize 67Kb)

    I found that by leaving out -dPDFSETTINGS=/screen, I got a very acceptable filesize of 250K
    – readable
    – small enough to send by email

    Summary: leave out: -dPDFSETTINGS=/screen for better quality.

  4. Thanx this really helped. Reduced my PDF from 32MB down to 2MB without any visible difference in quality. Ideal for uploading.

  5. Hi,

    I have a scanned pdf 2 pages, 380.8 kb and it got reduced to 292.7 kb. I need it to be bellow 100 kb. Any suggestions? It is scanned text, so it should still be readable…

    Thanks in advance!

  6. Hi:

    Is there a way to use this command for multiple pdf files?


  7. I had to use -dUseCIEColor to maintain the correct colors in the conversion process (by default, all of the shades turn out weird).

    If you’d like to fine-tune the compression settings beyond what the presets offer (-dPDFSETTINGS)=/preset), you can manipulate the parameters directly; a list of them can be found here: http://pages.cs.wisc.edu/~ghost/doc/cvs/Ps2pdf.htm

    I needed a target file size beyond what even /screen could produce, so I set the resolution to 38 (images really start to degrade at this point):

    gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dColorImageResolution=38 -dColorImageDownsampleType=/Average -dGrayImageDownsampleType=/Average -dGrayImageResolution=38 -dMonoImageResolution=38 -dMonoImageDownsampleType=/Average -dOptimize=true -dDownsampleColorImages=true -dDownsampleGrayImages=true -dDownsampleMonoImages=true -dUseCIEColor -dColorConversionStrategy=/sRGB -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf input.pdf

    Optimal results may require some experimenting.

  8. You can also use the following options for better adjustment:

    -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)

    More options and fine tunning on the site: http://milan.kupcevic.net/ghostscript-ps-pdf/

  9. Awesome tip! A lifesaver!

    For me, using -dPDFSETTINGS=/screen worked great! I tried scanning my *10-page* document at several resolutions, and the smaller ones printed blurry documents, while the next available DPI made the final (combined) PDF too huge to post to a group service. I’ve spent hours trying to shrink this in Xpdf and other programs (even with the CLI-program “convert”), with no success getting it small enough.

    However, this GhostScript trick made the document *much* smaller without loss of quality, and it was the *simplest* thing I’ve done all night! (Bear in mind, there are no photos in this document. Still, it brought the file from over 5 MB to only 659 kb!

    Thanks tons and tons!

  10. It gives me this error:

    Error: /rangecheck in –run–
    Operand stack:
    –dict:12/21(L)– –dict:0/0(L)– 686.787 1.9519 1310.25 789.078
    Execution stack:
    %interp_exit .runexec2 –nostringval– –nostringval– –nostringval– 2 %stopped_push –nostringval– –nostringval– –nostringval– false 1 %stopped_push 1878 1 3 %oparray_pop 1877 1 3 %oparray_pop 1861 1 3 %oparray_pop –nostringval– –nostringval– 2 1 330 –nostringval– %for_pos_int_continue –nostringval– –nostringval– false 1 %stopped_push –nostringval–
    Dictionary stack:
    –dict:1157/1684(ro)(G)– –dict:1/20(G)– –dict:75/200(L)– –dict:75/200(L)– –dict:108/127(ro)(G)– –dict:288/300(ro)(G)– –dict:23/25(L)– –dict:6/8(L)– –dict:22/40(L)–
    Current allocation mode is local
    Last OS error: 2
    GPL Ghostscript 8.71: Unrecoverable error, exit code 1
    GPL Ghostscript 8.71: ERROR: A pdfmark destination page 330 points beyond the last page 1.

  11. In case anyone finds it useful; here is a very simple bash script that uses the above command to reduce the PDF size, while making a backup of the original, and printing the filesizes (old and new)
    #set -x
    mv $File $OriginalFile
    gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/default -dNOPAUSE -dQUIET -dBATCH -sOutputFile=$File $OriginalFile
    du -sh $OriginalFile
    du -sh $File

    You might call it smallpdf, place it in /home/user/bin, make executable, and add the following line to your ~/.bashrc
    alias smallpdf=’~/bin/smallpdf’;

    then in any folder do
    ~$ smallpdf input.pdf

    I’m sure the script could be improved/enhanced (e.g. optionally specify ebook/printer/press)

  12. Thanks Tony!

    This is what I was looking for and/as I am learning BASH!

    I did as your post, but when I issue:

    $ smallpdf my_pdf_file.pdf

    There was an error message:

    “smallpdf: command not found!

    The “smallpdf.bash” was made executable and put in my /usr/bin as I do not have a /home/user/bin/ folder in my Ubuntu 11.04.
    Also I put the alias line in my ~/.bashrc.

    Each time I have to type:

    $ smallpdf.bash my_input_file.pdf

    It seems I am getting close, but not sure the place I missed. Thank you!

  13. Hi yifangt,

    I’m also a bit of a learner with bash scripts.

    Maybe you need to do have something like
    alias smallpdf=’/usr/bin/smallpdf.bash’;
    or similar.

    I just created a folder called ‘Programs’ in my home folder (rather than calling it ‘bin’), and stored the script there, then my bashrc line is:
    alias smallpdf=’~/Programs/smallpdf’;

    I’m sure you’ll get it right if you play around a bit with the locations/filenames, and permissions. Good luck!

  14. I don’t feel like resizing images inside my pdf files, however, I have just found another interesting way to significantly reduce the size of my pdf files.
    Simply by compressing them.
    *.pdf.gz files need not be decompressed if you want to open them in evince or okular.
    If, like me, you’ve got quite a lot of pdf files, this can save you a few GIGs of space (! you won’t be able to open the *.pdf.gz files in acroread and probably not on Windows either !)
    1)INSTALL pigz
    $ sudo apt-get install pigz
    (pigz is exactly like gzip, but it can work in multiple threads and thus utilize your multicore processor)
    $ find “$HOME” -name ‘*.pdf’ -print0 | xargs -0 -n32 pigz -v

  15. There was a typo in my first post…

    I know this is a bit old but I am sure someone out there is looking for this answer…I wrote this script to compress all the PDFs in a folder.
    for file in *.pdf
    echo $file #line not required
    temp=`echo “$file” | sed ‘s/.pdf/zqx.pdf/g’`
    echo $temp #line not required
    gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dNOPAUSE -dQUIET -dBATCH -sOutputFile=$temp $file
    mv $temp $file

    If you need a specific compression add the appropriate flag as shown in zweifel.

  16. Come on, you want to shrink a pdf which has 61 kb? This isn’t small enough for you?

  17. Fantastic tip, thanks! This reduced an unmanageable 30Mb scan of a 6 page doc to a very readable, and very email-able 541k!


  18. Fantastic! Worked like a chamr even in these noob’s hands.

    Reduced file size from 7 MB to 0.54 MB without any noticable reduction in quality. This may be an extreme case given I had scanned .jpg files interleaved with OOo-printed files with enhanced fonts, but no less amazing and greatly appreciated.


  19. Another option is to use xargs…

    ls *.pdf | xargs -i{} gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dNOPAUSE -dQUIET -dBATCH -sOutputFile={}-compressed.pdf {}

Leave a comment

Your email address will not be published. Required fields are marked *