Ghostscript使用mswinpr2打印时C#调用弹出打印对话框如何解决
问题根因
- Ghostscript原生API
gsapi_init_with_args要求传入的参数数组首位必须为执行程序名占位(可任意填写,无实际意义),你当前传入的参数数组缺少该占位项,导致首位有效参数被Ghostscript误判为程序名丢弃,后续所有参数整体错位,打印机配置参数未被正确识别,因此触发默认的打印机选择弹窗。 - 你当前对
sOutputFile的引号包裹规则有误,%printer%前缀不需要被引号包裹,仅当打印机名称包含空格时需要用引号包裹打印机名称部分,否则会导致%printer%前缀识别失败,无法锁定目标打印机。
解决方法
1. 调整参数数组结构
首先在参数数组最前面添加程序名占位,同时修正sOutputFile的引号位置,还可新增禁止弹窗的强制参数,修改后的代码如下:
private static bool DoGhostscriptPrint(string printerName, string pdfFilename) { try { String[] ghostScriptArguments = { "gswin64c", // 新增占位参数,对应命令行的可执行程序路径 "-dBATCH", "-dNOPAUSE", "-dSAFER", "-dNoCancel", "-dQueryUser=0", // 新增参数,强制禁止mswinpr2弹出任何交互窗口 "-dNumCopies=1", "-sDEVICE=mswinpr2", // 调整引号位置,仅包裹打印机名称,%printer%放在引号外 String.Format("-sOutputFile=%printer%\"{0}\"", printerName), "-f", pdfFilename }; GhostScript.CallAPI(ghostScriptArguments); return true; } catch (Exception ex) { Logger.Error("Unable to Print using Ghostscript: " + ex.Message + Environment.NewLine + ex.StackTrace); return false; } }
2. 权限验证
确认你的.NET应用运行身份有目标打印机的访问权限,权限不足时也会触发打印机选择弹窗。
3. 参数校验
可通过日志输出完整的传入参数,逐位和正常执行的命令行参数比对,确认无参数错位、转义错误问题。
内容的提问来源于stack exchange,提问作者Pradeep
相关产品推荐
相关产品推荐

