我有一个应用程序,我需要打印一张票。每张票必须是唯一的。该应用程序是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,但我无法得到它的持有。顺便说一下,打印机的软件确实在窗口工具栏中指出了不同的错误。
我的问题是,如果任何人都可以带领我正确地确定如何连接到打印机并检查打印是否成功。
此外,如果有人知道某些其他特定的打印机,我可以在其中完成此操作(即更改硬件),将会有所帮助。
感谢,
请参阅:http://stackoverflow.com/questions/1921487/confirm-successful-print-programmatically-in-windows – Eugene 2012-08-02 02:44:45
我做了,但一些示例代码,以获得先机将是有益的。 – lopezbertoni 2012-08-02 03:04:22
@lopezbertoni一个小谷歌会告诉你如何在C#应用程序中使用这些链接的方法...像http://www.codeproject.com/Articles/51085/Monitor-jobs-in-a-printer-queue-NET – 2012-08-02 03:08:25