有没有办法检查打印过程是否成功?

lop*_*oni 14 c# printing system.printing winforms

我有一个应用程序,我需要打印一张票.每张票必须是唯一的.该应用程序是Windows窗体,完全用c#编写.对于我们的应用,我们使用的是三星ML-2525激光单色打印机.

流程基本上如下,操作员选择产品/票据(这是唯一的),然后按下一个按钮,执行以下两项操作:

  1. 连接到数据库并更新使用的产品
  2. 打印票证(这是使用System.Drawing和GDI +完成的)

出于某种原因,每隔一段时间,需要打印的图像不会被发送到打印机.这是一种罕见的情况,但它确实发生了.

我尝试使用Win32_Printer(http://msdn.microsoft.com/en-us/library/Aa394363)连接到打印机,但我无法获得当前打印机的状态(在线,离线,低碳粉,卡纸等).我只能检查打印机是否存在以及纸张尺寸是否正确安装.我尝试了类似以下的代码,但它没有用

    private string MonitorPrintJobWmi()
    {
        var jobMessage = String.Empty;
        var scope = new ManagementScope(ManagementPath.DefaultPath);
        scope.Connect();

        var selectQuery = new SelectQuery { QueryString = @"select *  from Win32_PrintJob" };

        var objSearcher = new ManagementObjectSearcher(scope, selectQuery);
        var objCollection = objSearcher.Get();

        foreach (var job in objCollection)
        {
            if (job != null)
            {
                jobMessage += String.Format("{0} \r\n", job["Name"].ToString());
                jobMessage += String.Format("{0} \r\n", job["JobId"].ToString());
                _jobId = Convert.ToInt32(job["JobId"]);
                jobMessage += String.Format("{0} \r\n", job["JobStatus"].ToString());
                jobMessage += String.Format("{0} \r\n", job["Status"].ToString());
            }
        }
        return jobMessage;
    }
Run Code Online (Sandbox Code Playgroud)

我试图获得打印机的API,但我无法掌握它.顺便说一句,打印机的软件确实在Windows工具栏中指出了不同的错误.

我的问题是,是否有人能够指导我如何连接打印机并检查打印是否成功.

此外,如果有人知道我可以完成此操作的其他特定打印机,即更改硬件,将会很有帮助.

谢谢,

Ben*_*udo 5

要获取本地计算机上的打印队列列表,请尝试使用PrintServer的GetPrintQueues方法.

一旦您拥有与相关打印机关联的PrintQueue对象的实例,您就可以使用它来访问打印机的状态(IsOffline,IsPaperOut等).此外,您可以使用它来获取给定队列中的作业列表(GetPrintJobInfoCollection),然后这将允许您获取特定于作业的状态信息(IsInError,IsCompleted,IsBlocked等).

希望这可以帮助!

  • 它没有标记为答案,因为这只是报告作业已发送到打印机.并非打印机实际上已成功完成. (2认同)