向Ghostscript命令添加-c选项时,即使已禁止打印机弹出窗口,也会显示该弹出窗口

问题描述 投票:0回答:1

考虑从Windows命令行调用的以下ghostscript命令。

"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"

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

-c "<</Orientation 2>>setpagedevice"

以上命令来做

"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"

出现打印窗口。我没有改变命令的其他部分。是什么导致这种情况发生?如何停止出现打印窗口?

pdf ghostscript postscript
1个回答
1
投票

Ghostscript的操作数顺序很重要。特别是在使用-c开关时,它会引入PostScript来执行。

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

-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放在那里,但我强烈建议你这样做。一旦你开始以PostScript的形式处理命令行,你也不需要输入一个qopxswpoi,直到你停止它为止。我也怀疑你真的不想在那里使用-c。这将终止解释器,这意味着您将通过setpagedevice引入的更改将被丢弃,因为解释器将返回到默认状态。

在处理了quit的内容之后,Ghostscript继续并处理命令行的其余部分。这次有一个-c,所以你不会得到提示。

我希望这个:

-dNOPROMPT

会更好。请注意,您的初始命令行有一个重复的NOPAUSE并指定NOPROMPT和NOPAGEPROMPT(如果设置NOPROMPT,则不需要NOPAGEPROMPT,如果设置NOPAUSE则不需要NOPAGEPROMPT)。

最后我建议你不要使用"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" ,虽然它目前没有效果(因为这是默认设置),我们很快就会使SAFER成为默认值,设置-dNOSAFER会大大降低运行文件时的安全性。

你现在应该真的使用-dNOSAFER。如果不使用-dSAFER,有很多CVE可以解决此问题,并且现在可以对您的计算机产生不良影响(运行任意可执行文件,打开,写入,删除文件等)的概念证明。如果您不知道为什么要-dSAFER,那么请改用-dNOSAFER

哦,你也应该升级到当前版本9.27,你使用的版本已经有一年了。

© www.soinside.com 2019 - 2024. All rights reserved.