简体   繁体   English

如何在不显示打印对话框的情况下打印 WebBrowser 控件内容?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM