从Windows服务打印html文档,无需打印对话框
我正在使用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标志。 然后可以清理对象。
来自这个网站https://www.ussbd.com/printhtm.html
using HtmlPrinter; hpObj=new HtmlPrinter.HtmlPrinter(); hpObj.PrintUrlFromMemory(txtUrl.Text);
现在,在项目中添加代码,从源文本中打印html页面:
HtmlPrinter.HtmlPrinter hpObj=new HtmlPrinter.HtmlPrinter(); hpObj.PrintHtml(txtString.Text, true);
如果要在没有打印对话框的情况下进行打印,请使用以下行:
hpObj.PrintHtml(txtString.Text, false);
这是另一种没有打印对话框的打印方式。 您创建一个PrintDialog对象,初始化它然后调用Print()方法。
以下function用于打印小的2“x0.75”条形码标签。 您需要找到一种从html文件中获取Document
对象的方法。
public void PrintToPrinter(string printerName) { PrintDialog pd = new PrintDialog(); pd.Document = userControl11.PrintDoc; // <--- Update this line with your doc pd.PrinterSettings.PrinterName = printerName; try { pd.Document.DocumentName = "My Label"; pd.Document.DefaultPageSettings.PaperSize = new System.Drawing.Printing.PaperSize("2-.75", 200, 75); pd.Document.DefaultPageSettings.Margins = new System.Drawing.Printing.Margins(0, 0, 0, 0); //pd.PrinterSettings.Copies = (short)mNumCopies; pd.Document.PrinterSettings.Copies = (short) mNumCopies; pd.Document.Print(); } catch { MessageBox.Show("INVALID PRINTER SPECIFIED"); } }
您可以使用System.Drawing.Printing命名空间中的PrintDocument类来更好地控制打印,有关详细信息,请参阅此处 。
例如,您可以执行以下操作:
using (PrintDocument doc = new PrintDocument()) { doc.PrintPage += this.Doc_PrintPage; doc.DefaultPageSettings.Landscape = true; doc.DocumentName = fileNameOfYourDocument; doc.Print(); }
然后为每个要打印的页面引发一个函数,并为您提供要绘制的图形区域
private void Doc_PrintPage(object sender, PrintPageEventArgs ev) { .... ev.Graphics.DrawImage(image, x, y, newWidth, newHeight); }
这确实需要您将文本/图像上的实际绘图处理到页面,有关详细信息,请参阅此处 。
OLECMDEXECOPT_PROMPTUSER
似乎强制提示用户选择打印机和所有相关的东西,我很确定不允许从服务。 有人可以validation吗?
上述就是C#学习教程:从Windows服务打印html文档,无需打印对话框分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注---计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/942720.html