[英]How to print WebBrowser control content without showing print dialog?
I want to Print my HTML document directly to a specific network printer without printer dialog window when the end user click on PRINT button.当最终用户单击“打印”按钮时,我想将我的 HTML 文档直接打印到特定的网络打印机,而无需打印机对话框窗口。 I do search and follow this but this opens a dialog window to save the document as pdf.
我确实搜索并遵循此操作,但这会打开一个对话框窗口以将文档另存为 pdf。
Based On The Comments:基于评论:
public static class PrinterClass
{
[DllImport("winspool.drv", CharSet = CharSet.Auto, SetLastError = true)]
public static extern bool SetDefaultPrinter(string Printer);
}
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
//List<string> st = new List<string>();
//foreach (string strPrinter in PrinterSettings.InstalledPrinters)
//{
// if (strPrinter.Contains("My Printer"))
// {
// PrinterClass.SetDefaultPrinter(strPrinter);
// }
// st.Add(strPrinter);
//}
SetDefaultPrinter("Send To OneNote 2016");
}
WebBrowser webBrowser = new WebBrowser();
void Print(string str)
{
webBrowser.DocumentText = str;
webBrowser.DocumentCompleted += webBrowser_DocumentCompleted;
}
void webBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
IHTMLDocument2 d2;
d2 = (IHTMLDocument2)((WebBrowser)sender).Document.DomDocument;
d2.execCommand("Print", false, null);
}
private void btn_print_Click(object sender, EventArgs e)
{
Print("<html><body>..some html code..</body></html>");
}
public static bool SetDefaultPrinter(string defaultPrinter)
{
using (ManagementObjectSearcher objectSearcher = new ManagementObjectSearcher("SELECT * FROM Win32_Printer"))
{
using (ManagementObjectCollection objectCollection = objectSearcher.Get())
{
foreach (ManagementObject mo in objectCollection)
{
if (string.Compare(mo["Name"].ToString(), defaultPrinter, true) == 0)
{
mo.InvokeMethod("SetDefaultPrinter", null, null);
return true;
}
}
}
}
return false;
}
}
In the recent versions of the WebBroswer
control, Print()
prints to the default printer without showing any dialog:在
WebBroswer
控件的最新版本中, Print()
打印到默认打印机而不显示任何对话框:
webBrowser1.Print();
It's equivalent to getting an instance of IWebBrowser2
from the WebBrowser.ActiveXInstance
property and then call its ExecWB
method by passing OLECMDID_PRINT
as command and OLECMDEXECOPT_DONTPROMPTUSER
to specify not showing the prompt:它相当于从
WebBrowser.ActiveXInstance
属性获取IWebBrowser2
的实例,然后通过将OLECMDID_PRINT
作为命令和OLECMDEXECOPT_DONTPROMPTUSER
来指定不显示提示来调用其ExecWB
方法:
int OLECMDID_PRINT = 6;
int OLECMDEXECOPT_DONTPROMPTUSER = 2;
dynamic iwb2 = webBrowser1.ActiveXInstance;
iwb2.ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER, null, null);
Or in a single line of code:或者在一行代码中:
((dynamic)webBrowser1.ActiveXInstance).ExecWB(6, 2, null, null);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.