Ghostscript PDF批量压缩

Bab*_*hon 4 windows command-line ghostscript

我在Windows上安装了Ghostscript,因为我要做的是压缩/减少网络共享上12,000多个PDF文件的大小.任何GUI软件都无法做到这一点,因为资源耗尽导致它们在一段时间后就会爆炸,所以我认为命令行是这里的方法.

我已经阅读了Ghostscript文档和压缩PDF文件的不同示例,但我似乎无法找到任何大批量操作.

基本上,我需要定位多个文件夹来递归压缩将在网络共享上的文件.

使用Ghostscript可以这样做吗?如果是这样,请通过一些命令示例来帮助我实现这一点.

谢谢!

小智 8

我不知道是否有人需要它,但这是我在不降低质量的情况下高度压缩 PDF 文件的命令。我通过多次试验和错误发现它,它大大减少了 PDF 文件的大小。 PS 抱歉没有在上面的帖子中发帖,但作为新人,我没有足够的声誉。

%ghostscript% -q -dNOPAUSE -dBATCH -dSAFER -dSimulateOverprint=true -sDEVICE=pdfwrite -dPDFSETTINGS=/ebook -dEmbedAllFonts=true -dSubsetFonts=true -dAutoRotatePages=/None -dColorImageDownsampleType=/Bicubic -dColorImageResolution=150 -dGrayImageDownsampleType=/Bicubic -dGrayImageResolution=150 -dMonoImageDownsampleType=/Bicubic -dMonoImageResolution=150 -sOutputFile=output.pdf input.pdf
Run Code Online (Sandbox Code Playgroud)

  • 不再支持 `-dSimulateOverprint={true|false}`。请改用“-dOverPrint=/simulate”。顺便说一句,很好的答案! (2认同)

And*_*ing 6

使用以下脚本,您可以定义数组变量中所需的所有目录filesDir.
它将遍历所有这些目录并搜索所有目录中的所有pdf文件,包括子目录.
对于所有找到的pdf文件,它将使用此ghostscript命令(GitHub)并输出带有名称的文件,例如fileabc.pdf使用新名称:compr_fileabc.pdf.

编辑#1:

我根据注释的要求更改了脚本,以编写新的pdf文件或覆盖输入的pdf文件.要在这些选项之间进行选择,请将createNewPDFs变量更改为1(新文件)或0(覆盖).
由于ghostscript无法写入输入文件,因此输出文件将写入用户临时路径(%TEMP%)并移至原始输入文件以覆盖此文件.如果新文件的大小较小,它只会覆盖输入的pdf文件.
此外,ghostscript命令由具有相同名称的变量替换,因为在Windows下它可以是gswin64c(64位)或gswin32c(32位).

如果使用这些ghostscript命令开关播放的尺寸不够小-dPDFSETTINGS=/printer,则说明如下.

批处理脚本:

@echo off
setlocal EnableDelayedExpansion

rem ghostscript executable name
set "ghostscript=gswin64c"

rem directories to scan for files
set "filesDir[0]=FOLDER1"
set "filesDir[1]=FOLDER2"
set "filesDir[2]=FOLDER3"

rem extension of files to be scanned
set "ext=pdf"

rem new file be creation or input file overwrite
set "createNewPDFs=0"
rem file prefix for new files (if they should be created)
set "filepre=compr_"

rem loop over all directories defined in filesDir array
for /f "tokens=2 delims==" %%d in ('set filesDir[') do (
   if exist "%%~d" (
      pushd "%%~d"
      rem loop over all files in all (sub)directories with given extension
      for /f "delims=*" %%f in ('dir "*.%ext%" /b /s /a:-d') do (
         if [%createNewPDFs%] EQU [1] (
            %ghostscript% -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/printer -dNOPAUSE -dQUIET -dBATCH -sOutputFile="%%~dpf%filepre%%%~nxf" "%%~f"
         ) else (
            %ghostscript% -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/printer -dNOPAUSE -dQUIET -dBATCH -sOutputFile="%TEMP%\%%~nxf" "%%~f"
            for %%t in ("%TEMP%\%%~nxf") do ( set "newSize=%%~zt" )
            for %%t in ("%%~f") do ( set "oldSize=%%~zt" )
            if [!newSize!] LSS [!oldSize!] (
               rem new file is smaller --> overwrite
               move /y "%TEMP%\%%~nxf" "%%~f"
            ) else (
               rem new file is greater --> delete it of the temp dir
               del "%TEMP%\%%~nxf"
            )
         )
      )
      popd
   )
)
Run Code Online (Sandbox Code Playgroud)

找到GitHub ghostscript命令来减少pdf大小:

这可以将文件减少到其大小的约15%(在一种情况下为2.3M至345K),没有明显的质量下降.

ghostscript -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/printer -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf input.pdf
Run Code Online (Sandbox Code Playgroud)

PDFSETTINGS的其他选项:

  • / screen选择类似于Acrobat Distiller"Screen Optimized"设置的低分辨率输出.
  • / ebook选择类似于Acrobat Distiller"eBook"设置的中等分辨率输出.
  • / printer选择类似于Acrobat Distiller"Print Optimized"设置的输出.
  • /印前选择类似于Acrobat Distiller"Prepress Optimized"设置的输出.
  • / default选择旨在用于各种用途的输出,可能以更大的输出文件为代价.

资料来源:http://ghostscript.com/doc/current/Ps2pdf.htm


来自ss64.com的命令参考链接:

  • @BabyPython:我付出了努力.如果您通过回答如果您收到更多错误或现在是否正常工作而表示尊重,那将是很好的.进一步让我们删除我们之前发表的评论.一般来说,你会在聊天中讨论,但正如我所说,如果用户至少有20个声誉点,那么它是有效的. (2认同)
  • 请注意,默认情况下,Ghostscript会从PDF中删除超链接。要保留链接,请包含标志`-dPrinted = false`。 (2认同)