首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Ghostscript命令中添加-c选项时,即使打印机已被禁用,它也会弹出。

在Ghostscript命令中添加-c选项时,即使打印机已被禁用,它也会弹出。
EN

Stack Overflow用户
提问于 2019-04-12 07:14:14
回答 1查看 313关注 0票数 0

考虑下面从windows上的命令行调用的ghostscript命令。

代码语言:javascript
复制
"C:\Program Files\gs\gs9.23\bin\gswin64c.exe" -sDEVICE=mswinpr2  -dORIENT1=false -dNOPROMPT -dNOPAUSE -dPrinted -dBATCH -dNOPAUSE -dNOSAFER -q -dFIXEDMEDIA -dDEVICEWIDTHPOINTS=398 -dDEVICEHEIGHTPOINTS=157 -dNOPAGEPROMPT -dQUIET -dNumCopies=1 -sOutputFile="\\spool\BWLAB05" "c:\print\download\133679.pdf"

这个命令很好用。打印出来了,没有弹出框。现在,我添加以下内容。

代码语言:javascript
复制
-c "<</Orientation 2>>setpagedevice"

到上面要创建的命令

代码语言:javascript
复制
"C:\Program Files\gs\gs9.23\bin\gswin64c.exe" -sDEVICE=mswinpr2 -c "<</Orientation 2>>setpagedevice" -c "quit"  -dORIENT1=false -dNOPROMPT -dPrinted -dBATCH -dNOPAUSE -dNOSAFER -q -dFIXEDMEDIA -dDEVICEWIDTHPOINTS=398 -dDEVICEHEIGHTPOINTS=157 -dNumCopies=1 -sOutputFile="\\spool\BWLAB05" "c:\print\download\133679.pdf"

将出现打印窗口。我没有改变命令的其他部分。是什么导致了这一切?怎样才能阻止打印窗口的出现?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-12 14:35:48

Ghostscript操作数的顺序很重要。特别是在使用-c交换机时,它引入了要执行的PostScript。

实际上,您在这里运行两个命令:

代码语言:javascript
复制
-sDEVICE=mswinpr2 -c "<</Orientation 2>>setpagedevice" -c "quit"  

-dORIENT1=false -dNOPROMPT -dPrinted -dBATCH -dNOPAUSE -dNOSAFER -q -dFIXEDMEDIA -dDEVICEWIDTHPOINTS=398 -dDEVICEHEIGHTPOINTS=157 -dNumCopies=1 -sOutputFile="\\spool\BWLAB05" "c:\print\download\133679.pdf"

一旦到达-c,Ghostscript就停止处理命令行,并运行PostScript。此时,我们还没有遇到-dNOPROMPT,因为您还没有设置打印机,Ghostscript不知道要使用哪台打印机,因此,不出所料,打印机会弹出。

Ghostscript继续以PostScript的形式处理命令行的其余部分,直到它到达一个-f,或者实际上,任何以-开头的开关。您还没有在其中添加-f,但我强烈建议您这样做。您也不需要在命令行继续处理命令行之后,在停止命令行之前,放置秒-c。我还怀疑你真的不希望quit在那里。这将终止解释器,这意味着您通过setpagedevice引入的更改将被丢弃,因为解释器返回到默认状态。

在处理完-c的内容之后,Ghostscript继续并处理命令行的其余部分。这一次有一个-dNOPROMPT,这样您就不会被提示。

我希望这是:

代码语言:javascript
复制
"C:\Program Files\gs\gs9.23\bin\gswin64c.exe" -sDEVICE=mswinpr2 -dORIENT1=false -dNOPROMPT -dPrinted -dBATCH -dNOSAFER -q -dFIXEDMEDIA -dDEVICEWIDTHPOINTS=398 -dDEVICEHEIGHTPOINTS=157 -dNumCopies=1 -sOutputFile="\\spool\BWLAB05" -c "<</Orientation 2>>setpagedevice" -f "c:\print\download\133679.pdf"

会做得更好。注意,您的初始命令行有一个重复的非顶,并同时指定了NOPROMPT和NOPAGEPROMPT (如果设置了NOPROMPT,则不需要NOPAGEPROMPT,如果设置了NOPROMPT,则不需要它们)。

最后,我希望敦促 you不要使用-dNOSAFER,尽管它目前没有任何效果(因为这是默认设置),我们很快就会使默认设置更加安全,而设置-dNOSAFER将大大降低您在运行文件时的安全性。

您现在真的应该使用-dSAFER。有许多CVEs反对这一点,并且证明了现在流行的概念可能会对计算机产生不良影响(如果不使用-dSAFER,则运行任意可执行文件、打开、写入、删除文件等)。如果您不知道为什么要使用-dNOSAFER,那么使用-dSAFER代替。

哦,您还应该升级到当前版本9.27,您正在使用的版本是一年前的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55646349

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档