Ghostscript-如何在Windows10或Windows Server 2012上禁止显示打印对话框

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

我正在从Windows 10或Windows Server 2012(装有C#程序并执行命令的C#程序)下的Windows服务调用以下内容,但未打印任何内容。我可以将要发送的命令复制并粘贴到命令提示符中,但是它将弹出一个打印对话框,并且我必须单击“确定”以打印文件(确实如此)。我需要添加什么开关,以使对话框不会出现并且文件可以直接打印而无需用户干预,因为这样做的目的是使它作为Windows服务在无人值守的情况下工作?这是ghostscript 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-DYQJKC2\c$\Webs\myfolder\Public\Reports\HIPAACert\189\H01519447A2191016103332.pdf"
printing ghostscript
1个回答
0
投票

mswinpr2设备需要能够选择Windows打印机,是的。如果由于某种原因(例如,错误键入打印机名称是经典原因),则它将弹出打印机选择对话框。否则必须不知道将输出发送到哪里。我不得不猜测这是您的问题(与添加额外的开关无关)

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

我建议您继续从命令行开始工作,直到获得结果为止,所以不要将%加倍。

[除此之外,它很难评论。您是否在后台通道上得到任何东西(在调试时也想删除-q)?显然我不是在您的系统前,所以我看不到打印机的名称。

FWIW我在这里使用“ Adob​​e PDF”打印机尝试了它,但它可以工作,但是不能使用“ Microsoft XPS Document Writer”,实际上,即使从对话框中选择它也失败了“无法打开初始设备”。 >

[编辑]

稍后稍作调试。...Microsoft XPS Document Writer函数DocumentProperties()失败。我怀疑这是因为Windows上的打印系统已针对Vista和更高版本进行了重大改进,而Windows 10取消了许多旧代码。我怀疑这个旧的Win32 API调用根本无法在较新的设备上运行。

但是,如果从打印对话框中选择打印机时打印机可以工作,则这不是相同的问题。对我来说,即使从打印对话框中选择,该打印机也会失败。似乎与旧的Win32 API不兼容。

注意,这还会显示错误“打印机StartDoc失败(错误00000006)”。

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

我想不出ljet4设备中发生的任何变化,而这会引起问题,请不要说出来;在打印机上或Ghostscript报告的错误是什么,甚至是在哪里发生,所以实际上没有任何问题。我可以在这方面提供。

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