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);

那么如何确定打印处理完成,以便继续获取图像内容呢?

4

1 回答 1

2

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

  1. 同步打印。不过不是很好,因为它会在打印完成之前让你挂起。
  2. 异步打印文档,然后在循环中或后台工作线程中连续检查 APPLICATION.BACKGROUNDPRINTINGSTATUS 属性,直到它变为 0(不再打印)或您遇到看门狗超时

像这样的东西......

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

不完美,但它有效。

请注意,这只会告诉您何时完成从 word 中的假脱机。如果您正在谈论知道文档何时在打印机上实际完成打印,那是另一个问题。您将需要打印作业 ID,并且必须查询打印机后台处理程序的内容,我无法帮助您。

于 2010-10-17T03:56:36.883 回答