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,從而進行以下的邏輯程式碼
希望各位大神指點!!!!!!!!!!