我正在使用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应用程序正常工作.
首先,这是代码:
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标志.然后可以清理对象.