我有一个应用程序需要打印门票,每个门票必须是唯一的。该应用程序是Windows窗体应用程序,完全使用C#编写。我们的应用程序使用三星ML-2525激光单色打印机。
流程基本上如下:操作员选择产品/门票(唯一标识),然后按下按钮执行以下两个操作:
- 连接到数据库并将产品标记为已使用
- 打印门票(使用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;
}
我试图获取打印机的API,但是我无法找到它。顺便说一下,打印机的软件确实会在Windows工具栏中指示不同的错误。
我的问题是,是否有人能指导我如何连接打印机并检查打印是否成功。
另外,如果有人知道其他一些特定的打印机,我可能会更换硬件以实现这一目标。
谢谢