Ghostscript 不解释提供的打印机

Ghostscript doesn't interpret supplied printer

我在 GhostScript 中静默执行以下命令时遇到问题:

-q -dBATCH -dNOPAUSE -dNODISPLAY -c "mark /NoCancel true /OutputFile (\spool\ServerName\PrinterName) /UserSettings << /DocumentName (test)>> (mswinpr2) finddevice putdeviceprops setdevice" -f "c:\test.pdf" "c:\test2.pdf"

命令不会静默执行,它一直提示我 select 打印机,所以我怀疑 OutputFile 属性 可能是这里的问题。 之前,我有另一个完美运行的命令(见下文),但设置 documentName 的要求迫使我改变它:

-dPrinted -dBATCH -dNOPAUSE -dNOSAFER -q -sDEVICE=mswinpr2 -sOutputFile="\spool\ServerName\PrinterName" "c:\test.pdf" "c:\test2.pdf"

谁能指出我正确的方向?需要说明的是,该命令在确认打印机提示后才起作用。 我更喜欢内联解决方案,因为此命令是从托管代码调用的,文档名称是动态的

mswinpr2 设备,至少可以说,是 hacky 和非标准的,正如为了设置它需要弄乱非标准 PostScript 的要求所证明的那样。

您可以尝试保持原始命令行不变,并使用它(在输入文件之前)设置文档名称:

-c "currentdevice //null //false [ /UserSettings <</DocumentName (test) >> .putdeviceparams pop pop" -f

应该在安装后重新配置设备。我真的无法对此进行测试,因为即使我使用有效的打印机,您的命令行也会为我抛出范围检查错误。

原来你需要转义后记部分的反斜杠..

-q -dBATCH -dNOPAUSE -dNODISPLAY -c "mark /NoCancel true /OutputFile (\\spool\\\ServerName\PrinterName) /UserSettings << /DocumentName (test)>> (mswinpr2) finddevice putdeviceprops setdevice" -f "c:\test.pdf" "c:\test2.pdf"

以上在控制台中工作,当我将它合并到我的 c# 项目中时,我不得不再次转义这些转义,导致这个 c# 字符串

-q -dBATCH -dNOPAUSE -dNODISPLAY -c \"mark /NoCancel true /OutputFile (\\\\spool\\\\\\ServerName\PrinterName) /UserSettings << /DocumentName (test)>> (mswinpr2) finddevice putdeviceprops setdevice\" -f \"c:\test.pdf\" \"c:\test2.pdf\"

很美吧? /s