考虑下面从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"将出现打印窗口。我没有改变命令的其他部分。是什么导致了这一切?怎样才能阻止打印窗口的出现?
发布于 2019-04-12 14:35:48
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,但我强烈建议您这样做。您也不需要在命令行继续处理命令行之后,在停止命令行之前,放置秒-c。我还怀疑你真的不希望quit在那里。这将终止解释器,这意味着您通过setpagedevice引入的更改将被丢弃,因为解释器返回到默认状态。
在处理完-c的内容之后,Ghostscript继续并处理命令行的其余部分。这一次有一个-dNOPROMPT,这样您就不会被提示。
我希望这是:
"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,您正在使用的版本是一年前的。
https://stackoverflow.com/questions/55646349
复制相似问题