我使用GS用2次点击“压缩”PDF。我已经用上述代码在windows register中添加了一个上下文菜单。
例如,如果我在test.pdf上使用它,输出文件将是test.pdf-compressed.pdf。它可以工作,但是我想去掉文件名中的扩展名。有没有办法做到这一点?
我尝试使用cmd参数,但它似乎不适用于postscript。
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
发布于 2019-05-17 18:55:44
这不是Ghostscript问题。如果参数正确,那么传递给Ghostscript的参数将是正确的,并且输出文件将是您想要的。
你没有说出你尝试过的东西,所以很难给出建议。但是,您应该能够使用%~dp1和/或%~n1,而不是简单地使用%1来展开到路径或文件。还有其他变体,在Windows命令行中键入"help for“将提供更多详细信息。
请一如既往地注意,Ghostscript不会压缩PDF文件,通过使用-dPDFSETTINSG=/ebook
,您正在生成一个全新的PDF文件,它改变了原始文件的内容(例如,图像将被下采样)。
而且sequence -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:\ new.pdf中创建了一个临时文件
因此,变量扩展按预期工作,因为它发生在命令行执行之前。
如果它仍然对你不起作用,那么你将不得不提供更多的信息。首先,我会从命令行中删除-dNOPAUSE和-dBATCH开关,这样您就可以知道Ghostscript是否在试图告诉您一些信息。
发布于 2020-10-31 07:24:47
很明显,我偶然发现这篇文章有点晚了。然而,我想把我的答案发布出来,以防将来有人来寻找类似问题的解决方案。
我首先在我的桌面上创建了一个新文件夹,标题为"PDF",我在其中放置了"test.pdf“文件。然后,我创建了一个标题为"CompressPDF.bat“的.BAT文件,并在其中添加了下面的脚本。
此脚本将循环通过并压缩任何/所有.PDF文件,这些文件放在"PDF“文件夹中。然后,根据OP的请求,它正确地将"-compressed.pdf“字符串附加到文件名中,从而将"test.pdf”文件保存为“test-COMPRESED.pdf”。
正如您将注意到的,我在脚本的最后添加了"PAUSE“命令。这将防止窗口自动关闭,直到您按任何键,这将允许您检查在压缩过程中可能出现的任何错误。
@echo off
cd "%USERPROFILE%\Desktop\PDF"
for %%f in (*.pdf) do (
gswin64c.exe -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile="%%~nf-compressed.pdf" "%%f"
)
PAUSE
我希望这篇文章能够帮助其他可能正在寻找类似问题的答案的人。
请随时回复或联系我,如果有人有任何问题,因为我总是很乐意帮助。
https://stackoverflow.com/questions/56183821
复制相似问题