代码之家  ›  专栏  ›  技术社区  ›  Beatles1692

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

  •  2
  • Beatles1692  · 技术社区  · 15 年前

    这是我的代码:

    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 回复  |  直到 10 年前
        1
  •  2
  •   Beatles1692    11 年前

    不幸的是,我发现在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,并且必须查询打印机后台处理程序的内容,我无法帮助你。