使用ghostscript时,如何使用输入文件名附加输出文件名而不进行扩展?

时间:2019-05-17 09:46:46

标签: windows pdf command-line ghostscript

我正在使用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

2 个答案:

答案 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

我希望这篇文章能够对其他人有所帮助,他们可能正在寻找类似问题的答案。

如果有人有任何疑问,请随时回复或与我联系,因为我一直很乐意为您提供帮助。