考虑从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"
出现打印窗口。我没有改变命令的其他部分。是什么导致这种情况发生?如何停止出现打印窗口?
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,你使用的版本已经有一年了。