交互式模式下Ghostscript结束打印作业且保持进程运行的命令求解
Windows平台Ghostscript复用进程打印PDF作业提交解决方案
核心解决命令
每次打印完单份PDF文件后,执行以下PostScript指令即可提交当前打印作业、关闭输出文件,同时保持Ghostscript交互进程和打印机配置上下文不被销毁:<</EndJob true>> setpagedevice
原理解释
- Ghostscript的mswinpr2设备默认会将打印页缓存到作业队列中,只有收到
EndJob信号时才会正式提交作业、完成文件写入(XPS测试场景)或发送给物理打印机 - 之前手动执行
showpage生成空白页的原因是:调用(xxx.pdf) run时,Ghostscript的PDF解释器已经自动处理了PDF内部所有页面的showpage指令,额外调用该指令会追加新的空白页 setpagedevice传入EndJob=true时只会触发作业提交逻辑,不会销毁当前已初始化的打印机配置,因此后续可直接调用打印命令处理下一份PDF
可选优化(提前配置免每次传参)
你可以修改setup_xps.ps文件,在setdevice行之前追加以下配置,后续提交作业逻辑完全不变:
/CloseDeviceWhenDone false def
修改后的完整setup_xps.ps内容如下:
mark /NoCancel true % don't show the cancel dialog /OutputFile (%printer%Microsoft XPS Document Writer) /PageSize [114.0 85.0] /CloseDeviceWhenDone false % 设备作业提交后不销毁上下文 (mswinpr2) finddevice % select the Windows device driver putdeviceprops setdevice
完整操作流程验证
- 启动Ghostscript进程(命令保持不变):
gswin64c.exe -dFitPage -dNOSAFER -dNOPAUSE -q setup_xps.ps - 打印第一份PDF:
(test.pdf) run - 提交当前作业(XPS文件此时会完成写入,队列中排队的作业消失):
<</EndJob true>> setpagedevice - 直接打印第二份PDF,无需重新初始化设备:
(test_2.pdf) run - 重复步骤3提交第二份作业即可
生产环境适配说明
切换为业务打印机时无需修改核心逻辑,仅需调整setup_xps.ps中的OutputFile参数为对应打印机名称即可,作业提交命令完全兼容。
内容的提问来源于stack exchange,提问作者Aleksey F.
相关产品推荐
相关产品推荐

