1. 程式人生 > >c# 利用webbrower控制元件列印html——實現列印頁面設定

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,從而進行以下的邏輯程式碼

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