当前位置:  开发笔记 > 编程语言 > 正文

从Windows服务打印html文档,无需打印对话框

如何解决《从Windows服务打印html文档,无需打印对话框》经验,为你挑选了1个好方法。

我正在使用Windows服务,我想在服务启动时打印.html页面.我正在使用此代码并且打印效果很好.但是打印对话框来了,如何在没有打印对话框的情况下打印?

public void printdoc(string document)
{
    Process printjob = new Process();

    printjob.StartInfo.FileName = document;
    printjob.StartInfo.UseShellExecute = true;
    printjob.StartInfo.Verb = "print";
    printjob.StartInfo.CreateNoWindow = true;
    printjob.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;

    printjob.Start();
}

有没有其他方法来打印它而不显示打印对话框.


更新:响应此:

但是我已经使用过这个课了但是当我打电话的时候

axW.ExecWB(SHDocVw.OLECMDID.OLECMDID_PRINT,SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_PROMPTUSER , ref em, ref em);

当我从窗口服务使用时,我的程序阻止在这里,但它从Windows应用程序正常工作.



1> Tarsier..:

首先,这是代码:

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

    您可以通过添加对"添​​加引用"对话框的"COM"选项卡上的"Microsoft Internet Controls"的引用来访问SHDocVw命名空间.

    有关InternetExplorer对象的更多信息可以在MSDN上找到.

    Navigate()方法将加载HTML文件.其他参数允许您指定可选参数,例如标志和标题.

    在加载文档之前我们无法打印.在这里,我进入一个循环,等待调用DocumentComplete事件,然后设置一个标志通知我们导航已完成.请注意,导航完成后会调用DocumentComplete - 成功失败时.

    设置documentLoaded标志后,将通过QueryStatusWB()查询打印状态,直到启用打印为止.

    使用ExecWB()调用启动打印.OLECMDID_PRINT指定了该命令,以及在OLECMDEXECOPT_DONTPROMPTUSER没有用户交互的情况下自动打印的选项.一个重要的注意事项是,这将打印到默认打印机.要指定打印机,您必须设置默认打印机(在代码中,您可以调用SetDefaultPrinter()).两个最终参数允许可选的输入和输出参数.

    我们不希望在打印完成之前退出,因此再次输入循环.触发PrintTemplateTeardown事件后,将设置documentPrinted标志.然后可以清理对象.

推荐阅读
mobiledu2402852413
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有