C# C/S程序使用HTML文件作为打印模板

时间:2022-02-13 05:44:21

C#   C/S程序使用HTML文件作为打印模板

在网上找了一堆的资料,整理到郁闷呀,慢慢试慢慢改。哎,最终成功了,哈,,菜鸟伤不起呀

public partial class Print : Form
    {

       // 定义dgSetPage托付进行打印时的选项设置
        public delegate void dgSetPage();   

     //定义dgFileDelete 托付进行打印完毕后。删除填充后的模板文件
        public delegate void dgFileDelete();

[DllImport("User32.dll", EntryPoint = "FindWindow")]
        private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
        [DllImport("User32.dll", EntryPoint = "FindWindowEx")]
        private static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpClassName, string lpWindowName);
 
        [DllImport("User32.dll", EntryPoint = "SendMessage")]
        public static extern int SendMessage(IntPtr hWnd, int msg, int wParam, int lParam);
 

        //定义SendMessage方法内使用的鼠标单击 常量

const int BM_CLICK = 0xF5;
 

private void btnPrint_Click(object sender, EventArgs e)
        {
            btnPrint.Enabled = false;

           //由于是使用WebBrowser对象进行打印HTML文件,所以无法控制页面设置,须要使用注冊表改动一些内容

           //方法 ChangePageSettingByRegist 。改动注冊表,取消页眉、页角项目
            ChangePageSettingByRegist();

      //读取数据填充HTML模板
            string sFillDataResult=FillDataToNewFile();


            if (sFillDataResult.IndexOf("NG") >= 0)
            {
                MessageBox.Show(sFillDataResult);
                return;
            }

pd_PrintPage(); 
            btnPrint.Enabled = true;
        }

private void pd_PrintPage()
        {
            //创建一个WebBrowser对象,然后用它在后台打开并解释HTML文件
            WebBrowser webBrowserForPrinting = new WebBrowser();

           //  lblNewFile.Text  保存是填充后的模板文件名称 
            webBrowserForPrinting.Url = new Uri(Application.StartupPath.ToString() + "\\" +  lblNewFile.Text);

//当载入文件完毕后激发手动追加的事件
            webBrowserForPrinting.DocumentCompleted +=   new WebBrowserDocumentCompletedEventHandler(PrintDocument);
            webBrowserForPrinting.Focus();
        }


        private void PrintDocument(object sender,WebBrowserDocumentCompletedEventArgs e)
        { 
            //创建一个新的线程,用于当弹出页面设置对话框时发送设置为横向的指令
            Thread th = new Thread(new ThreadStart(new dgSetPage(SetPage)));
            th.Start(); 

    //弹出页面设置对话框-----即上方定义的新进程须要处理的窗体
            ((WebBrowser)sender).ShowPageSetupDialog();