Ghostscript-如何在Windows10或WindowsServer2012上取消打印对话框



我正在从windows 10或windows Server 2012下的windows服务(用于执行命令的C#程序(中调用以下内容,但没有打印任何内容。我可以将发送的命令复制并粘贴到命令提示符中,但它会弹出一个打印对话框,我必须单击"确定"才能打印文件(它确实这样做了(。我需要添加什么开关,以便在没有用户干预的情况下不会出现对话框并直接打印文件,因为这样做的目的是作为windows服务在无人值守的情况下工作?这是代笔9.50,这是截至今天的最新版本。在ghostscript的早期版本中,如果设备设置为ljet4,这会起作用,但这会导致9.50的错误。此外,输出文件的输出文件上没有%printer%前缀,以前它的前缀是\\spool\。这些组合我都试过了。是mswinpr2导致了不需要的对话框吗?我猜这就是阻止打印发生的原因。

gswin64c -dPrinted -dBATCH -dNOPAUSE -dNOSAFER -q -dNumCopies#1 -sDEVICE#mswinpr2 -sOutputFile#"%%printer%%HP LaserJet Professional P1109w" "\2-DYQJKC2c$WebsmyfolderPublicReportsHIPAACert189H01519447A2191016103332.pdf"

我最近遇到了同样的问题。我添加了-dQueryUser=3参数。有关-dQueryUser=N的使用文档,请访问:https://www.ghostscript.com/doc/9.25/Devices.htm#Win在10.2支持的选项(设备属性(部分

在Windows10上的批处理文件中,说明这一点的代码是:

SET MY_EXECUTABLE_PATH=C:Program Filesgsgs9.53.3bin
for %%i in (*.pdf) do "%MY_EXECUTABLE_PATH%"gswin64c.exe -sDEVICE=mswinpr2 -dBATCH -dNOPAUSE -dPDFFitPage -dQueryUser=3 -sOutputFile="%printer%Printer_Name" "%%i"

mswinpr2设备需要能够选择Windows打印机,是的。如果由于任何原因(例如,错误键入打印机名称是一个典型的原因(无法打印,则会弹出打印机选择对话框。它必须这样做,否则它不知道将输出发送到哪里。我不得不猜测这是你的问题(与添加额外的交换机无关(

您应该从命令行使用%printer%,您只需要将批处理文件中的%加倍,因为批处理文件处理试图解释%,所以您必须对其进行转义。因此,如果您在命令行中将%加倍,那么是的,它确实会弹出一个对话框,因为%printer%n与%%printer%%不同,因此Ghostscript不会将其识别为打印机。

我建议你继续从命令行工作,直到得到结果,所以不要把%加倍。

除此之外,很难对此发表评论。你在后台通道上得到了什么吗(你也想在调试时去掉-q(?很明显,我没有坐在你的系统前面,所以我看不出打印机叫什么。。。。。

FWIW我在这里用"Adobe PDF"打印机尝试过,它可以工作,但使用"Microsoft XPS Document Writer"不行,事实上,即使从对话框中选择它也会失败"无法打开初始设备"。

[编辑]

稍后进行一点调试。。。。函数DocumentProperties((在Microsoft XPS Document Writer中失败。我怀疑这是因为Windows上的打印系统针对Vista及更高版本进行了重大修改,而Windows 10删除了大部分遗留代码。我怀疑这个旧的Win32 API调用根本不适用于较新的设备。

但是,如果您在打印对话框中选择打印机时打印机可以工作,则这不是同一个问题。对我来说,即使从打印对话框中选择,这台打印机也会失败。看起来它与旧的Win32 API不兼容。

注意,这还会显示错误"Printer StartDoc failed(error 00000006("。

所以我仍然怀疑您对打印机名称有问题。也许一个快速的测试是将名称设置为非常简单的东西,比如"Printer1",然后尝试一下

我想不出ljet4设备有什么变化会引起问题,你不会;我不知道打印机上或Ghostscript报告的错误是什么,甚至不知道错误发生在哪里,所以在这方面我真的无能为力。

最新更新