我正在使用GS单击2次来“压缩” PDF。我在Windows注册器中使用上述代码添加了上下文菜单。
例如,如果我在test.pdf上使用它,则输出文件将为test.pdf-compressed.pdf。它可以工作,但是我想摆脱文件名中的扩展名。有什么办法吗?
我尝试使用cmd参数,但似乎不适用于该后记。
C:\Program Files\gs\gs9.27\bin\gswin64c.exe -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dPDFSETTINGS=/ebook -dCompatibilityLevel=1.4 -sOutputFile=%1%-compressed.pdf -c .setpdfwrite -f %1
答案 0 :(得分:0)
这不是Ghostscript问题。如果您得到正确的参数,那么传递给Ghostscript的参数将是正确的,并且输出文件将是您想要的。
您尚未说出尝试过的内容,因此很难提出建议。但是,您应该能够使用%〜dp1和/或%〜n1而不是简单地将%1扩展为仅路径或文件。还有其他变体,在Windows命令行中键入“ help for”将为您提供更多详细信息。
请始终注意,Ghostscript不会压缩PDF文件,通过使用-dPDFSETTINSG=/ebook
,您将生成一个全新的PDF文件,该文件已更改了原始内容(例如,图像将被下采样)。
序列-c .setpdfwrite -f
多年以来都是多余的,您不需要它。
[编辑]
此批处理文件演示了批处理文件中命令shell变量扩展的用法
@ECHO OFF
ECHO Input file is %1
ECHO Input directory is %~dp1
\ghostpdl\debugbin\gswin32c -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=%~dp1\new.pdf %1
另存为test.bat然后测试d:\ temp \ input.ps时,将生成以下输出:
Input file is d:\temp\input.ps
Input directory is d:\temp\
GPL Ghostscript GIT PRERELEASE 9.28 (2019-04-04)
Copyright (C) 2019 Artifex Software, Inc. All rights reserved.
This software is supplied under the GNU AGPLv3 and comes with NO WARRANTY:
see the file COPYING for details.
然后在目录d:\ temp
中创建一个文件new.pdf。所以变量扩展按预期方式工作,因为它发生在执行命令行之前。
如果它仍然不适合您,那么您将不得不提供更多信息。在您的位置,我将从命令行中删除-dNOPAUSE和-dBATCH开关开始,至少这样,您将能够查看Ghostscript是否试图告诉您一些信息。
答案 1 :(得分:0)
我显然误发现了这个帖子有些晚。 但是,我想发布我的答案,以防将来有人寻求类似问题的解决方案。
我首先在桌面上创建了一个名为“ PDF”的新文件夹,并在其中放置了“ test.pdf”文件。 然后,我创建了一个名为“ CompressPDF.bat”的.BAT文件,并在下面添加了脚本。
此脚本将遍历并压缩“ PDF”文件夹中的任何/所有.PDF文件。 然后,根据OP的请求,它将“ -compressed.pdf”字符串正确附加到文件名,从而将“ test.pdf”文件另存为“ test-compressed.pdf”。
您会注意到,我在脚本的最后添加了“ PAUSE”命令。 这样可以使窗口在单击过程中一直保持自动关闭状态,直到您按下Any Key(任意键)为止为止。
@echo off
cd "%USERPROFILE%\Desktop\PDF"
for %%f in (*.pdf) do (
gswin64c.exe -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile="%%~nf-compressed.pdf" "%%f"
)
PAUSE
我希望这篇文章能够对其他人有所帮助,他们可能正在寻找类似问题的答案。
如果有人有任何疑问,请随时回复或与我联系,因为我一直很乐意为您提供帮助。