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

14 c# printing windows-services

我正在使用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();
}
Run Code Online (Sandbox Code Playgroud)

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


更新:响应:

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

axW.ExecWB(SHDocVw.OLECMDID.OLECMDID_PRINT,SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_PROMPTUSER , ref em, ref em);
Run Code Online (Sandbox Code Playgroud)

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

Tar*_*ier 15

首先,这是代码:

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();
    }
  }
}
Run Code Online (Sandbox Code Playgroud)
  1. 您可以通过添加对"添​​加引用"对话框的"COM"选项卡上的"Microsoft Internet Controls"的引用来访问SHDocVw命名空间.
  2. 有关InternetExplorer对象的更多信息可以在MSDN上找到.
  3. Navigate()方法将加载HTML文件.其他参数允许您指定可选参数,例如标志和标题.
  4. 在加载文档之前我们无法打印.在这里,我进入一个循环,等待调用DocumentComplete事件,然后设置一个标志通知我们导航已完成.请注意,导航完成后会调用DocumentComplete - 成功失败时.
  5. 设置documentLoaded标志后,将通过QueryStatusWB()查询打印状态,直到启用打印为止.
  6. 使用ExecWB()调用启动打印.OLECMDID_PRINT指定了该命令,以及在OLECMDEXECOPT_DONTPROMPTUSER没有用户交互的情况下自动打印的选项.一个重要的注意事项是,这将打印到默认打印机.要指定打印机,您必须设置默认打印机(在代码中,您可以调用SetDefaultPrinter()).两个最终参数允许可选的输入和输出参数.
  7. 我们不希望在打印完成之前退出,因此再次输入循环.触发PrintTemplateTeardown事件后,将设置documentPrinted标志.然后可以清理对象.


Jac*_*ble 1

从这个网站http://www.ussbd.com/printhtm.html

using HtmlPrinter;
hpObj=new HtmlPrinter.HtmlPrinter();
hpObj.PrintUrlFromMemory(txtUrl.Text);
Run Code Online (Sandbox Code Playgroud)

现在,您在项目中添加代码以从源文本打印 html 页面:

HtmlPrinter.HtmlPrinter hpObj=new HtmlPrinter.HtmlPrinter();
hpObj.PrintHtml(txtString.Text, true);
Run Code Online (Sandbox Code Playgroud)

如果您想在没有打印对话框的情况下进行打印,请使用以下行:

hpObj.PrintHtml(txtString.Text, false); 
Run Code Online (Sandbox Code Playgroud)