2013-08-23 60 views
7

我正在用c#開發windowform應用程序。檢查打印是否已成功完成

在我的應用程序中,我編寫了下面的代碼,以從本地機器獲取所有圖像並打印出來。

files = Directory.GetFiles(@"C:\temp", "*.jpeg"); 

     foreach (var i in files) 
     { 
      var objPrintDoc = new PrintDocument(); 
      objPrintDoc.PrintPage += (obj, eve) => 
      { 
       System.Drawing.Image img = System.Drawing.Image.FromFile(i); 
       Point loc = new Point(100, 100); 
       eve.Graphics.DrawImage(img, loc); 
      }; 
      objPrintDoc.Print(); 
     } 

現在我要檢查如果打印已經成功或者沒有做,然後我想刪除我手動創建存儲圖像的臨時文件夾。

我已經嘗試了下面的代碼,但它並沒有爲我工作。

 PrintServer myPrintServer;      
     PrintQueueCollection myPrintQueues = myPrintServer.GetPrintQueues(); 
     String printQueueNames = "My Print Queues:\n\n"; 
     foreach (PrintQueue pq in myPrintQueues) 
     { 
      printQueueNames += "\t" + pq.Name + "\n"; 
     } 

請讓我們知道我的問題,並做必要的。

感謝,PRASHANT

+1

_但它沒有爲我工作 - 它怎麼不工作? –

+0

@AustinSalonen獲取PrintQueueCollection myPrintQueues = myPrintServer.GetPrintQueues(); – User5590

+0

By _how_我的意思是_你在期待什麼,你在做什麼? –

回答

3

這裏是一個MSDN描述爲PrintSystemJobInfo.JobStatus

https://msdn.microsoft.com/en-us/library/system.printing.printsystemjobinfo.jobstatus(v=vs.110).aspx

我嘗試下面的代碼,看到打印狀態。

private void brnPrint_Click(object sender, EventArgs e) 
     { 
      var files = Directory.GetFiles(@"D:\Folder", "*.jpg"); 

      foreach (var i in files) 
      { 
       var objPrintDoc = new PrintDocument(); 
       objPrintDoc.PrintPage += (obj, eve) => 
        { 
         Image img = Image.FromFile(i); 
         Point loc = new Point(100, 100); 
         eve.Graphics.DrawImage(img, loc); 
        }; 

       objPrintDoc.Print(); 
       PrintServer myPrintServer = new PrintServer(@"\\ComputerName"); 
       PrintQueueCollection myPrintQueues = myPrintServer.GetPrintQueues();     
       try 
       { 
        foreach (PrintQueue pq in myPrintQueues) 
        { 
         pq.Refresh(); 
         PrintJobInfoCollection pCollection = pq.GetPrintJobInfoCollection(); 
         foreach (PrintSystemJobInfo job in pCollection) 
         { 
          listBox1.Items.Add(pq.Name); 
          SpotTroubleUsingJobAttributes(job); 
         } 

        } 
       } 
       catch (Exception) 
       { 
        //throw; 
       } 
      } 
     } 

     public void SpotTroubleUsingJobAttributes(PrintSystemJobInfo theJob) 
     { 
      if ((theJob.JobStatus & PrintJobStatus.Blocked) == PrintJobStatus.Blocked) 
      { 
       listBox1.Items.Add("The job is blocked."); 
      } 
      if (((theJob.JobStatus & PrintJobStatus.Completed) == PrintJobStatus.Completed) 
       || 
       ((theJob.JobStatus & PrintJobStatus.Printed) == PrintJobStatus.Printed)) 
      { 
       listBox1.Items.Add(
        "The job has finished. Have user recheck all output bins and be sure the correct printer is being checked."); 
      } 
      if (((theJob.JobStatus & PrintJobStatus.Deleted) == PrintJobStatus.Deleted) 
       || 
       ((theJob.JobStatus & PrintJobStatus.Deleting) == PrintJobStatus.Deleting)) 
      { 
       listBox1.Items.Add(
        "The user or someone with administration rights to the queue has deleted the job. It must be resubmitted."); 
      } 
      if ((theJob.JobStatus & PrintJobStatus.Error) == PrintJobStatus.Error) 
      { 
       listBox1.Items.Add("The job has errored."); 
      } 
      if ((theJob.JobStatus & PrintJobStatus.Offline) == PrintJobStatus.Offline) 
      { 
       listBox1.Items.Add("The printer is offline. Have user put it online with printer front panel."); 
      } 
      if ((theJob.JobStatus & PrintJobStatus.PaperOut) == PrintJobStatus.PaperOut) 
      { 
       listBox1.Items.Add("The printer is out of paper of the size required by the job. Have user add paper."); 
      } 

      //if (((theJob.JobStatus & PrintJobStatus.Paused) == PrintJobStatus.Paused) 
      // || 
      // ((theJob.HostingPrintQueue.QueueStatus & PrintQueueStatus.Paused) == PrintQueueStatus.Paused)) 
      //{ 
      // HandlePausedJob(theJob); 
      // //HandlePausedJob is defined in the complete example. 
      //} 

      if ((theJob.JobStatus & PrintJobStatus.Printing) == PrintJobStatus.Printing) 
      { 
       listBox1.Items.Add("The job is printing now."); 
      } 
      if ((theJob.JobStatus & PrintJobStatus.Spooling) == PrintJobStatus.Spooling) 
      { 
       listBox1.Items.Add("The job is spooling now."); 
      } 
      if ((theJob.JobStatus & PrintJobStatus.UserIntervention) == PrintJobStatus.UserIntervention) 
      { 
       listBox1.Items.Add("The printer needs human intervention."); 
      } 

     }