Skip to content

Instantly share code, notes, and snippets.

@peaeater
Created May 25, 2018 17:47
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save peaeater/80f115d3050ddf92d36d9e4a6856da01 to your computer and use it in GitHub Desktop.
Save peaeater/80f115d3050ddf92d36d9e4a6856da01 to your computer and use it in GitHub Desktop.
Downsamples PDFs with ghostscript.
<#
Downsample PDF and convert to gray if necessary.
Requires Ghostscript (gswin64c).
#>
param (
[string]$indir,
[string]$outdir = $indir,
[string]$gs = "gswin64c",
[string]$dpi = "150"
)
# verbatim marker forces powershell to pass anything afterwards as-is, preserving quotes etc.
$verbatim = '--%'
$files = Get-ChildItem $indir -filter *.pdf
$i = 0
foreach ($file in $files) {
$i++
$inputFile = "`"$($file.FullName)`""
$newFile = [System.IO.Path]::Combine($outdir, $file.Name)
write-progress -activity "Optimizing PDFs..." -status "Processing $i of $($files.Count)" -percentcomplete (($i / $files.Count) * 100)
# call ghostscript
& $gs `
-o "$newFile" `
-sDEVICE=pdfwrite `
-dCompressPages=true `
-dCompressFonts=true `
-dDownsampleColorImages=true `
-dDownsampleGrayImages=true `
-dDownsampleMonoImages=true `
-dColorImageResolution="$dpi" `
-dGrayImageResolution="$dpi" `
-dMonoImageResolution="$dpi" `
-dColorImageDownsampleThreshold="1.0" `
-dGrayImageDownsampleThreshold="1.0" `
-dMonoImageDownsampleThreshold="1.0" `
-dProcessColorModel=/DeviceGray `
-dColorConversionStrategy=/Gray `
-dCompatibilityLevel="1.7" `
-dEmbedAllFonts=false `
-c ".setpdfwrite <</AlwaysEmbed [ ] /NeverEmbed [/Courier /Courier-Bold /Courier-Oblique /Courier-BoldOblique /Helvetica /Helvetica-Bold /Helvetica-Oblique /Helvetica-BoldOblique /Times-Roman /Times-Bold /Times-Italic /Times-BoldItalic /Symbol /ZapfDingbats] /ColorImageFilter /DCTEncode /GrayImageFilter /DCTEncode /MonoImageFilter /CCITTFaxEncode /OutputICCProfile (None)>> setdistillerparams" `
-f `
$verbatim $inputFile
}
write-host "Done optimizing PDFs." -ForegroundColor Green
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment