Windows Ghostscript PDF批处理压缩

Windows Ghostscript PDF批处理压缩,windows,command-line,ghostscript,Windows,Command Line,Ghostscript,我已经在Windows上安装了Ghostscript,因为我想做的是压缩/减少网络共享上12000多个PDF文件的大小。这在任何GUI软件中都是不可能的,因为它只是在一段时间后由于资源耗尽而爆炸,所以我认为命令行是解决这个问题的方法 我已经阅读了Ghostscript文档和压缩PDF文件的不同示例,但是我似乎找不到任何可以大批量运行的东西 基本上,我需要以多个文件夹为目标,以递归方式压缩网络共享上的文件 使用Ghostscript可以这样做吗?如果是这样,请提供一些命令示例来帮助我实现这一点 谢

我已经在Windows上安装了Ghostscript,因为我想做的是压缩/减少网络共享上12000多个PDF文件的大小。这在任何GUI软件中都是不可能的,因为它只是在一段时间后由于资源耗尽而爆炸,所以我认为命令行是解决这个问题的方法

我已经阅读了Ghostscript文档和压缩PDF文件的不同示例,但是我似乎找不到任何可以大批量运行的东西

基本上,我需要以多个文件夹为目标,以递归方式压缩网络共享上的文件

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


谢谢

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

编辑#1:

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

如果输出大小不够小,请使用这些ghostscript命令开关:
-dPDFSETTINGS=/printer
,如下所述

批处理脚本:

@echo关闭
setlocal EnableDelayedExpansion
rem ghostscript可执行文件名
设置“ghostscript=gswin64c”
要扫描文件的rem目录
设置“filesDir[0]=FOLDER1”
设置“filesDir[1]=FOLDER2”
设置“filesDir[2]=FOLDER3”
要扫描的文件的rem扩展名
设置“ext=pdf”
rem新文件正在创建或输入文件覆盖
设置“createNewPDFs=0”
新文件的rem文件前缀(如果应该创建)
设置“filepre=compr”
在filesDir数组中定义的所有目录上执行rem循环
对于/f“tokens=2 delims==”%%d in('set filesDir[')do(
如果存在“%%~d”(
pushd“%%~d”
rem循环所有(子)目录中具有给定扩展名的所有文件
对于/f“delims=*”%%f in('dir“*。%ext%”/b/s/a:-d'),请执行以下操作(
如果[%createNewPDFs%]等于[1](
%ghostscript%-sDEVICE=pdfwrite-dCompatibilityLevel=1.4-dPDFSETTINGS=/printer-dNOPAUSE-dQUIET-dBATCH-sOutputFile=“%%~dpf%filepre%%~nxf”“%%~f”
)否则(
%ghostscript%-sDEVICE=pdfwrite-dCompatibilityLevel=1.4-dPDFSETTINGS=/printer-dNOPAUSE-dQUIET-dBATCH-sOutputFile=“%TEMP%\%%~nxf”“%%~f”
对于%%t in(“%TEMP%\%%~nxf”)执行(设置“newSize=%%~zt”)
对于%%t in(“%%~f”)do(设置“oldSize=%%~zt”)
如果[!newSize!]LSS[!oldSize!](
rem新文件较小-->覆盖
移动/y“%TEMP%\%%~nxf”%%~f
)否则(
rem新文件更大-->删除临时目录中的该文件
删除“%TEMP%\%%~nxf”
)
)
)
邻苯二胺
)
)

减少pdf大小:

这可以将文件大小减少到约15%(有一种情况下为2.3M到345K),而不会明显降低质量

ghostscript-sDEVICE=pdfwrite-dCompatibilityLevel=1.4-dPDFSETTINGS=/printer-dNOPAUSE-dQUIET-dBATCH-sOutputFile=output.pdf input.pdf
PDF设置的其他选项:

  • /屏幕选择与Acrobat蒸馏器“屏幕优化”设置类似的低分辨率输出
  • /电子书选择与Acrobat蒸馏器“电子书”设置类似的中等分辨率输出
  • /打印机选择类似于Acrobat蒸馏器“打印优化”设置的输出
  • /印前选择类似于Acrobat蒸馏器“印前优化”设置的输出
  • /默认选择在各种用途中都有用的输出,可能以牺牲更大的输出文件为代价
资料来源:


命令参考链接来自:


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


这里没有任何东西能和最新的gs一起工作,所以我最终

gswin64c.exe -dPDFSETTINGS#/ebook -dPDFX -dBATCH -dNOPAUSE -sColorConversionStrategy=CMYK -sDEVICE=pdfwrite -sOutputFile="output.pdf" "input.pdf"
使用自动调整尺寸的jpg格式,并顺时针旋转90度

gswin64c -dORIENT1=false -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=C:\Users\username\Desktop\somepdffile.pdf -c "<</Orientation 3>> setpagedevice" -f "C:\Program Files\gs\gs9.19\lib\viewjpeg.ps" -c "(C:\\Users\\username\\Desktop\\somejpgfile.JPG) << /PageSize 2 index viewJPEGgetsize 2 array astore  >> setpagedevice viewJPEG"
gswin64c-dORIENT1=false-dBATCH-dNOPAUSE-sDEVICE=pdfwrite-sOutputFile=C:\Users\username\Desktop\somepdffile.pdf-C“setpagedevice”-f“C:\Program Files\gs\gs9.19\lib\viewjpeg.ps”-C“(C:\\Users\\username\\Desktop\\somejpgfile.JPG)>setpagedevice viewjpeg”

/方向3控制旋转角度

我遇到了同样的问题,这帮助了我。将15MB pdf转换成400kb

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.2 -r200 -dPrinted=false -dNOPAUSE -dQUIET -dBATCH -sOutputFile=c12_{filename} {filename} 

我需要用新的减小的文件大小覆盖现有的PDF文件,因为目标是节省空间并减少共享上的磁盘容量。感谢此脚本,但是如果我想保留相同的文件名而不创建新的文件名呢?因为我正在尝试减小磁盘上的容量。请使用:
set“filepre=“
而不是
set”“filepre=comprê”
。但首先在一个文件上测试生成的ghostscript命令,以确保
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.2 -r200 -dPrinted=false -dNOPAUSE -dQUIET -dBATCH -sOutputFile=c12_{filename} {filename}