You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用打印服务器队列发送ZPL打印作业仅挂起不打印的问题求助

问题分析与解决方案

核心问题

通过PrintServer/PrintQueue提交打印作业时,作业被添加到队列后立即被删除,无法执行打印。直接向打印机IP发送ZPL指令可正常工作,但业务要求必须通过打印队列实现耗材缺料时的作业缓存。

关键原因

默认调用pq.AddJob()时,打印作业会被标记为EMF格式(增强元文件),而ZPL是打印机原生的RAW指令,打印服务器无法解析EMF格式下的ZPL内容,直接判定为无效作业并删除。

修复步骤

1. 指定RAW格式提交作业

调用AddJob的重载方法,明确指定作业为RAW格式,让打印服务器直接将指令转发给打印机,不做格式转换:

PrintServer ps = new PrintServer(@"\\10.10.15.158");
PrintQueue pq = ps.GetPrintQueue(@"Printer1");

// 指定作业名和RAW格式类型
PrintSystemJobInfo job = pq.AddJob("ZPL Label Job", "RAW", false);

2. 用BinaryWriter写入ZPL指令

ZPL是字节流指令,StreamWriter会做字符编码转换,可能破坏原始指令。改用BinaryWriter直接写入字节:

// 转换ZPL字符串为ASCII字节流(ZPL基于ASCII编码)
byte[] zplBytes = Encoding.ASCII.GetBytes(@"^XA^FO50,50^ADN,36,20^FDTest label^FS^XZ");

using (BinaryWriter writer = new BinaryWriter(job.JobStream))
{
    writer.Write(zplBytes);
    writer.Flush();
    // 关闭流时自动提交作业
}

额外验证点

  • 确认打印队列的高级设置中已启用“允许RAW格式打印”(默认开启,可进入打印机属性-高级选项检查)
  • 确保程序运行账户拥有打印队列的提交作业权限(你其他程序能正常打印,此步骤大概率无需调整)

内容的提问来源于stack exchange,提问作者Oliver Yoliver

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 10:20:31