如何从Web服务器打印格式化文本并确认打印成功?

时间:2012-03-24 03:31:52

标签: c# asp.net .net windows

我正在尝试构建一个系统,该系统将从Web服务器下载格式化文本,打印格式化文本,确认打印作业已成功完成,然后响应Web服务器以使其知道文本已打印。全部没有用户输入。

我成功使用Web Browser控件下载HTML,然后在不需要用户输入的情况下打印它。然而,这不能确认打印的能力。

System.Printing中,您可以访问PrintServer和PrintQueue,并使用它们来启动打印作业并查找打印作业的状态。

我还没有确认打印作业,但我已经能够启动简单的打印。但是,这不会从Web服务器进行任何HTML格式化。我不依赖于HTML,但它必须是一些可以由Web服务器生成的格式,因此可以更改它而无需更新客户端应用程序。

如何打印Web服务器的输出,格式正确,并知道打印作业是成功还是失败?

1 个答案:

答案 0 :(得分:1)

我假设您愿意使用WebBrowser控件。这是确认打印的解决方案。基本上您需要处理 PrintTemplateTeardown 事件以等待打印作业完成。

以下是从答案中提取的示例代码:Print html document from Windows Service without print dialog

using System.Reflection;
using System.Threading;
using SHDocVw;

namespace HTMLPrinting
{
  public class HTMLPrinter
  {
    private bool documentLoaded;
    private bool documentPrinted;

    private void ie_DocumentComplete(object pDisp, ref object URL)
    {
      documentLoaded = true;
    }

    private void ie_PrintTemplateTeardown(object pDisp)
    {
      documentPrinted = true;
    }

    public void Print(string htmlFilename)
    {
      documentLoaded = false;
      documentPrinted = false;

      InternetExplorer ie = new InternetExplorerClass();
      ie.DocumentComplete += new DWebBrowserEvents2_DocumentCompleteEventHandler(ie_DocumentComplete);
      ie.PrintTemplateTeardown += new DWebBrowserEvents2_PrintTemplateTeardownEventHandler(ie_PrintTemplateTeardown);

      object missing = Missing.Value;

      ie.Navigate(htmlFilename, ref missing, ref missing, ref missing, ref missing);
      while (!documentLoaded && ie.QueryStatusWB(OLECMDID.OLECMDID_PRINT) != OLECMDF.OLECMDF_ENABLED)
        Thread.Sleep(100);

      ie.ExecWB(OLECMDID.OLECMDID_PRINT, OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER, ref missing, ref missing);
      while (!documentPrinted)
        Thread.Sleep(100);

      ie.DocumentComplete -= ie_DocumentComplete;
      ie.PrintTemplateTeardown -= ie_PrintTemplateTeardown;
      ie.Quit();
    }
  }
}

您还可以参考:http://jiangsheng.net/SynchronousWebBrowserPrinting.aspx

希望它有所帮助!