c# 利用webbrower控件打印html——实现打印页面设置

领导分配了一个任务,利用c#连接打印机,打印一个html页面,对于一个Java本专业还不太熟练的我,之前从未接触过c#,挑战还是很大的。

但是没办法,做呗!!!

首先找一个写c#的工具呗,所以下载了vs2015,实现方法如下:

1、新建一个form项目

2、form中集成一个webbrower控件去显示html

3、html中js调用c#中的打印方法,实现打印

4、打印的时候,如何设置自定义的页面设置,如页眉页脚、页边距、背景颜色等,找了很多方法,各种尝试,通过修改注册表来实现

5、html中的js就可以调用Print()方法啦

代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Drawing.Printing;
using System.Runtime.InteropServices;
using System.Collections;
using System.IO;
using Microsoft.Win32;




namespace printCar
{
    [System.Runtime.InteropServices.ComVisible(true)]   //与js交互必须的
    public partial class Form1 : Form
    {


        public Form1()
        {
            InitializeComponent();
            this.WindowState = FormWindowState.Maximized;//初始窗口最大化
            this.FormBorderStyle = FormBorderStyle.None;//设置窗口无边框
            //this.webBrowser1.ObjectForScripting = new JSObject();
            this.webBrowser1.Navigate("http://172.16.1.190:8083");//加载网页
            webBrowser1.ObjectForScripting = this;  //与js交互必须的
        }


        private void Form1_Load(object sender, EventArgs e)
        {


        }


        private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {


        }


        public void Print()
        {
            string keyName = @"Software\Microsoft\Internet Explorer\PageSetup\";
            using (RegistryKey key = Registry.CurrentUser.OpenSubKey(keyName, true))
            {
                if (key != null)
                {
                    
                    key.SetValue("footer", "");  //设置页脚为空
                    key.SetValue("header", "");  //设置页眉为空
                    key.SetValue("Print_Background", true); //设置打印背景颜色
                    key.SetValue("margin_bottom", 0);  //设置下页边距为0
                    key.SetValue("margin_left", 0);   //设置左页边距为0
                    key.SetValue("margin_right", 0);  //设置右页边距为0
                    key.SetValue("margin_top", 0);   //设置上页边距为0


                    this.webBrowser1.Print();  //打印


                }
            }
            
        }


    }
}


到此我还有两个问题:

1、我现在是打印的是控件显示的当前页,怎样才能js传递一个html片段,我c#后台实现打印

2、如何实时获取打印机的状态,返回给js,从而进行以下的逻辑代码

希望各位大神指点!!!!!!!!!!


你可能感兴趣的:(c#)