目前我正在使用这种方式将zpl文件发送到打印机:
/C copy /B zplFile.zpl \\localhost\GX420d
在C#中我使用此代码:
System.Diagnostics.Process process = new System.Diagnostics.Process();
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
startInfo.FileName = processName; //cmd
startInfo.Arguments = string.Format(processArgument, "tmp.txt");
process.StartInfo = startInfo;
process.Start();
一切都很好,问题是我没有握手知道打印过程何时成功完成,例如,如果我发送zpl文件并且打印机没有标签,或者被删除,则执行的系统该命令假定打印过程成功完成。
我需要知道标签是否已成功打印。
注意1:打印机是使用USB电缆的GX420d。
有什么建议吗?
先谢谢。
编辑:
如果您在下图中看到,有待打印的待处理作业,那么,也许作为我可以使用C#在此列表中搜索的工作空间,这可能吗?
答案 0 :(得分:1)
好吧,也许这个workarround会起作用。
http://www.codeproject.com/Articles/51085/Monitor-jobs-in-a-printer-queue-NET
如果您有更好的选择来解决此问题,我将非常感谢您的评论。
仅为记录,我搜索打印机作业,并计算待处理的作业,如果大于零,我认为它失败了。
步骤如下:
1.-将ZPL文件发送到打印机。
2.-使用System.Threading.Thread.Sleep
等待预定时间。
3.-搜索打印机待处理作业,如果计数> 0然后它将失败,因为我认为标签不能成功打印。
非常感谢你们所有人花时间回答。如果您知道更好的解决方案,我将非常感谢您的评论。
答案 1 :(得分:0)
检查一下,其中一个变量可能包含错误:
var process = new Process();
var startInfo = new ProcessStartInfo();
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.FileName = processName; //cmd
startInfo.Arguments = string.Format(processArgument, "tmp.txt");
startInfo.RedirectStandardOutput = true;
startInfo.RedirectStandardError = true;
startInfo.UseShellExecute = false;
process.StartInfo = startInfo;
process.Start();
string outputText = process.StandardOutput.ReadToEnd(); // Check this
string errorText = process.StandardError.ReadToEnd(); // Check this
int exitCode = process.ExitCode; // Check this
process.WaitForExit();
// In outputText is probably something here...
// In errorText is probably something here...
// In exitCode is probably something here...
答案 2 :(得分:0)
请查看ZPL Manual中的Host Query~HQ ZPL命令。
这不是一个完美的解决方案,但我们的想法是,您可以在发送ZPL进行打印之前或之后查询打印机的状态。