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

那么,如何确定打印处理已经完成,以便我可以继续并获得图像内容?

有帮助吗?

解决方案

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

  1. 同步打印。虽然不是很好,因为它可以吊死您,直到打印完成为止。
  2. 异步打印DOC,然后检查应用程序。BackgroundPrintingStatus属性在循环或背景工作人员线程中连续进行0(不再打印),否则您击中了看门狗超时

这样的东西。

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

并不完美,但它起作用。

请注意,这只会告诉您何时从Word完成启动时。如果您正在谈论知道该文档何时在打印机上真正完成打印,那是另一个问题。您将需要打印JobID,并且必须查询打印机的挡板材料,我无法帮助您。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top