Optimize PDFs with Ghostscript gsx
command, for example the test/raw_pdf.pdf (generated by Figma) goes from 3.7 MB to 642 KB.
First, make sure you've installed Ghostscript in your command. In Mac it looks like this:
brew install ghostscript
Then, install this tool globally:
npm install gsx-pdf-optimize --global
gsx-pdf-optimize input.pdf [output.pdf] [opts]
Options:
--preset, -P one of: screen (default), printer, prepress, ebook
--dpi, -D image resampling resolution in DPI, default 300
--quiet enable or disable logging (default quiet=true)
--command the Ghostscript command to use, default gsx
You can also override the command with the GSX_OPTIMIZE_COMMAND env var, e.g. if you want to set that in your bash profile.
Examples:
gsx-pdf-optimize input.pdf
gsx-pdf-optimize input.pdf output.pdf
gsx-pdf-optimize input.pdf --preset=ebook --dpi=96
GSX_OPTIMIZE_COMMAND=gs gsx-pdf-optimize input.pdf output.pdf
Below is the raw command if you'd like to optimize it further yourself. Credit goes to @lkraider and this gist.
gsx -sDEVICE=pdfwrite \
-dPDFSETTINGS=/screen \
-dNOPAUSE -dQUIET -dBATCH \
-dCompatibilityLevel=1.5 \
`# font settings` \
-dSubsetFonts=true \
-dCompressFonts=true \
-dEmbedAllFonts=true \
`# color format` \
-sProcessColorModel=DeviceRGB \
-sColorConversionStrategy=RGB \
-sColorConversionStrategyForImages=RGB \
-dConvertCMYKImagesToRGB=true \
`# image resample` \
-dDetectDuplicateImages=true \
-dColorImageDownsampleType=/Bicubic \
-dColorImageResolution=300 \
-dGrayImageDownsampleType=/Bicubic \
-dGrayImageResolution=300 \
-dMonoImageDownsampleType=/Bicubic \
-dMonoImageResolution=300 \
-dDownsampleColorImages=true \
`# preset overrides` \
-dDoThumbnails=false \
-dCreateJobTicket=false \
-dPreserveEPSInfo=false \
-dPreserveOPIComments=false \
-dPreserveOverprintSettings=false \
-dUCRandBGInfo=/Remove \
-sOutputFile=output.pdf \
input.pdf
MIT, see LICENSE.md for details.