使用虚拟打印机时,如何检查打印是否已完成?

时间:2010-10-12 12:53:48

标签: c# ms-word virtual-printer

我正在使用虚拟打印机将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);

然后,我如何确定打印处理已完成,以便我可以继续并获取图像内容?

1 个答案:

答案 0 :(得分:2)

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

  1. 同步打印。但不是很好,因为它会让你感到困扰 直到打印完成。
  2. 异步打印文档,然后检查 APPLICATION.BACKGROUNDPRINTINGSTATUS属性在循环中或在 后台工作者线程一直持续到它变为0(不再 打印)或者你看到看门狗超时
  3. 像这样......

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

    不完美,但有效。

    请注意,这只会告诉您何时从word完成假脱机。如果您正在谈论知道文档何时在打印机上实际完成打印,那就是另一个问题。你需要打印jobID并且必须查询打印机假脱机程序的东西,我无法帮助你。