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)
使用以下脚本,您可以定义数组变量中所需的所有目录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),没有明显的质量下降.
Run Code Online (Sandbox Code Playgroud)ghostscript -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/printer -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf input.pdfPDFSETTINGS的其他选项:
- / screen选择类似于Acrobat Distiller"Screen Optimized"设置的低分辨率输出.
- / ebook选择类似于Acrobat Distiller"eBook"设置的中等分辨率输出.
- / printer选择类似于Acrobat Distiller"Print Optimized"设置的输出.
- /印前选择类似于Acrobat Distiller"Prepress Optimized"设置的输出.
- / default选择旨在用于各种用途的输出,可能以更大的输出文件为代价.
来自ss64.com的命令参考链接: