LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

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

admin
2023年8月11日 17:49 本文热度 785

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();

            //打印
            ((WebBrowser)sender).Print();
           
            //释放资源
            ((WebBrowser)sender).Dispose();

            //删除填充后的模板文件,防止反复打印
            System.IO.File.delete(lblNewFile.Text);
            lblNewFile.Text = "";
        }

        //  此处方式被凝视掉了,由于假设须要改动主窗体内控件的内容或者状况里须要使用托付调用改动方法


       //  须要时,把SetPage与SetPage2名称互换就可以在变更后的名称为SetPage2内加入改动主窗体内容的代码
        //private void SetPage2()
        //{
        //    //新建托付对象
        //    MethodInvoker In = new MethodInvoker(SetPage2);
        //    this.BeginInvoke(In);
        //}


        private void SetPage()
        {
            int i = 0;

          //      此处须要设置循环查找时间。眼下为超过10秒未找到结束查找
          while (true)
            {
                IntPtr WindownHand = FindWindow("#32770", "页面设置");
                if (WindownHand != IntPtr.Zero)
                {

                    //找到窗体内子项目的名柄,然后模拟鼠标左键单击事件
                    IntPtr Wk = FindWindowEx(WindownHand, IntPtr.Zero, null, "横向(&A)");
                    SendMessage(Wk, BM_CLICK, 0, 0);

                    IntPtr Wk1 = FindWindowEx(WindownHand, IntPtr.Zero, null, "确定");
                    SendMessage(Wk1, BM_CLICK, 0, 0);

                    break;
                }
                else
                {
                    if (i > 20)
                        break;
                    Thread.Sleep(500);
                    i++;
                }
            }

        }


        //改动注冊表,把页眉页脚拿掉。然后设置为缩放至一页
        private void ChangePageSettingByRegist()
        {
            RegistryKey hklm = Registry.CurrentUser;
            RegistryKey software = hklm.OpenSubKey(@"Software\Microsoft\Internet Explorer\PageSetup".ToUpper(), true);
            object A = (object)"";
            object B = (object)"0.5";
            object C = (object)"0";
            software.SetValue("header", A);
            software.SetValue("footer", A);
            software.SetValue("margin_bottom", B);
            software.SetValue("margin_left", C);
            software.SetValue("margin_right", C);
            software.SetValue("margin_top", C);
            software.SetValue("Shrink_To_Fit","yes");          

        }


HTML模板内容片段

     <%A%>  占位符,用于替换

    <table cellpadding="0" cellspacing="0" border="0px">
        <tr><td colspan="8"  class="EachPartSpace"></td></tr>
        <tr><td class="LayOutFieldTitle" colspan="8">Machine Protocol</td></tr>       
        <tr>
            <td class="FieldNameHorizontal Column1With">Purchase Order No:</td>
            <td class="FieldValueHorizontal Column2With"><%OrderNo%></td>
            <td class="FieldNameHorizontal Column1With">Unit No:</td>
            <td class="FieldValueHorizontal Column2With"><%UnitNo%></td>
            <td class="FieldNameHorizontal Column1With">Region:</td>
            <td class="FieldValueHorizontal Column6With"><%Region%></td>
            <td class="FieldNameHorizontal Column2With">Assembly date:</td>
            <td class="FieldValueHorizontal Column2With"><%AssemblyDate%></td>
        </tr>
    </table>


该文章在 2023/8/11 17:49:26 编辑过

全部评论2

admin
2023年8月11日 18:9
 打印时动态更改打印机参见:
【C#】Winform之C/S架构html页面文件实现直接点击批量顺序打印[4]
  http://20825.oa22.cn
admin
2023年8月11日 18:32
 在用c#实现打印功能时,我们可以将内容先转化为网页形式或者吧模板写成固定的html格式,然后进行内容填充。

在打印过程中,我们可以用到的函数:

//转到某个网址
webBrowser.Navigate("");
//直接打印
 webBrowser.Print();
 //预览
 webBrowser.ShowPrintPreviewDialog();
 //打印
 webBrowser.ShowPrintDialog();
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved