2010-10-12 148 views
2

我正在使用虚拟打印机将一个Word文档打印到C#程序中的图像文件中。到目前为止,一切都很顺利,只是我不知道打印过程何时完成,因此我可以读取生成的图像的内容。 这里是我的代码:使用虚拟打印机时,如何检查打印是否完成?

using System; 
using Microsoft.Office.Interop.Word; 
using Word=Microsoft.Office.Interop.Word; 

var app = new ApplicationClass(); 
object filename = "C:\\ad.doc"; 
var missing = Type.Missing; 
var doc = app.Documents.Open(ref filename, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing); 
var oldPrinter = app.ActivePrinter; 
app.ActivePrinter = "Name of printer"; 
object outputFileName = "c:\\ad.tif"; 
object trueValue = true; 
object falseValue = false; 

doc.PrintOut(ref trueValue, ref falseValue, ref missing, ref outputFileName, ref missing, ref missing, 
          ref missing, ref missing, ref missing, ref missing, ref trueValue, ref missing, ref missing, 
          ref missing, ref missing, ref missing, ref missing, ref missing); 


app.ActivePrinter=oldPrinter ;     
doc.Close(ref missing, ref missing, ref missing); 
app.Quit(ref missing, ref missing, ref missing); 

那么我怎么能肯定的是,打印处理结束,所以我可以继续获得图像内容?

回答

2

不幸的是,我发现在Word中检查打印状态的唯一方法是两件事之一。

  1. 同步打印。不是很好,因为它可以挂你 直到打印完成。
  2. 异步打印文档,然后检查 APPLICATION.BACKGROUNDPRINTINGSTATUS财产在一个循环或在 后台工作线程不断,直到它变成0(不再 打印)或者你打一个看门狗超时

事情是这样的....

 Do Until _Doc.Application.BackgroundPrintingStatus = 0 
      System.Windows.Forms.Application.DoEvents() 
      System.Threading.Thread.Sleep(750) 
     Loop 

并不完美,但它的工作原理。

请注意,这只会告诉你它何时完成从单词的假脱机。如果你正在谈论什么时候文件在打印机上实际完成打印,那是另一个问题。您将需要打印作业ID,并且必须查询打印机假脱机程序的内容,我无法帮助您。

相关问题