如何知道何时使用copy命令打印进程到localhost打印机成功完成?

时间:2016-07-04 16:33:30

标签: c# printing zpl

目前我正在使用这种方式将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#在此列表中搜索的工作空间,这可能吗?

List of pending jobs

3 个答案:

答案 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进行打印之前或之后查询打印机的状态。