我有一台打印机(HP PageWide MFP P57750)通过以太网电缆连接到专用网络。在一个简单的 C# Web App 中,用户将 pdf 文件发送到打印机并设置要打印的份数。在打印结束时,应用程序应通知作业结束。
我尝试使用 PrintDocument 的 EndPrint 事件,但它似乎在错误的时间触发,因为打印机仍在打印。
我也尝试将 PrintQueue 与 PrintJobInfoCollection 一起使用,但它只是第一次返回“正在打印”的 PrintJobStatus。然后,我等待 5 秒钟并重新检查状态,但打印机仍在打印时队列中没有作业!
我在控制面板-> 设备和打印机中看到了作业的进度。即使有很多份并且打印机仍在打印,打印也只会持续几秒钟。我认为在客户端将要打印的文件发送到打印机后,该作业会被删除。
我怎样才能赶上印刷的真正结束?
PdfDocument pdf = new PdfDocument();
pdf.LoadFromFile(filePath);
pdf.PrinterName = CicloStampa.Properties.Settings.Default.NomeStampante;
pdf.PrintDocument.PrinterSettings.Copies = (short)numeroCopie;
pdf.PrintDocument.Print();
PrintServer myPrintServer = new PrintServer();
PrintQueue pq = myPrintServer.GetPrintQueue(CicloStampa.Properties.Settings.Default.NomeStampante);
var printing = true;
while (printing)
{
pq.Refresh();
PrintJobInfoCollection pCollection = pq.GetPrintJobInfoCollection();
foreach (PrintSystemJobInfo job in pCollection)
{
//SpotTroubleUsingJobAttributes returns KO/OK by matching PrintJobStatus. First time returns PrintJobStatus.Priting. Second time, pCollection is empty and the printer is still printing.
var res = SpotTroubleUsingJobAttributes(job);
System.IO.File.AppendAllText(AppDomain.CurrentDomain.BaseDirectory + @"\Logs\LogImportazione.txt", DateTime.Now.ToString() + " ---- \t\t\t RES: " + res + "\n");
if (res.StartsWith("KO"))
{
//DO STUFF
}
else
{
//END OF PRINT
printing = false;
}
}
if (pCollection.Count() == 0)
{
printing = false;
}
if (printing)
{
System.Threading.Thread.Sleep(5000);
}
}