Fineui中使用Lodop打印,制作标签套打范例,c#后台调用

实现目标: 标签套打实现位置可调,可增加不同模板调用,利用数据库存放打印格式

涉及:C# 、SQLSERVER 

实现流程如下:

一、数据库创建存放打印模板的表格。



 /*标签主表*/
Create table Label_Template
(
 JLBH  int		     not null,
 BDMC  varchar(100)  null,
 CONSTRAINT PK_Label_Template PRIMARY KEY CLUSTERED (JLBH) 
 WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
 ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
)
go

  /*标签子表*/
  Create table Label_ITEM
(
 jlbh        int		        not null,
 field_la    varchar(20)        not null,
 top_la      varchar(20)        default 0 null,
 left_la     varchar(20)        default 0 null,
 width_la    varchar(20)        default 0 null,
 height_la   varchar(20)        default 0 null,
 font_size   varchar(20)        default 0 null,
 yxbj        bit                default 1 null,
 CONSTRAINT PK_Label_ITEM PRIMARY KEY CLUSTERED (jlbh,field_la) 
 WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
 ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
)

二、实现后,c#界面,用于商品标价签打印。

 

三、页面代码,自已写吧,不贴了。

四、c#后台代码,因个人水平有限,很少写前台JS,一般涉及JS操作调用,全部C#后调用,

   1、C#调用LODOP打印JS代码,传入数据库中保存的坐标,及列表中信息进行打印,通过两个循环套娃,配合LODOP代码,实现动态赋值。

           // 下面代码主要是调用LODOP格式的JS代码。
            var sb = new StringBuilder();
 
            sb.AppendLine(" var LODOP; //声明为全局变量  ");
            sb.AppendLine("  function PrintTable(title) {"); 
            sb.AppendLine("  LODOP = getLodop();");
            sb.AppendLine("  LODOP.PRINT_INIT(title);");
            sb.AppendLine("   LODOP.SET_PRINT_MODE('PROGRAM_CONTENT_BYVAR', true);");  
            sb.AppendLine("   CreateAllPages(); "); //取循环值套打分页
            sb.AppendLine("   LODOP.PREVIEW(); };");
            sb.AppendLine("    function CreateAllPages(){ ");
         
            //这个循环主要是取出要打印的信息,取GRID中字段的信息
            int[] selections = grid_bottom.SelectedRowIndexArray;
            foreach (int rowIndex in selections)
            {
             sb.AppendLine("    LODOP.NewPage();      "); //分页 
             sb.AppendLine("    LODOP.SET_PRINT_MODE('PROGRAM_CONTENT_BYVAR', true);");
       // 这个循环主要是取打印格式的信息进行配对,
      List<Dictionary<string, object>> newAddedList = grid_Center.GetNewAddedList();
                for (int i = 0; i < newAddedList.Count; i++)      //一行一行循环 
                {
                    int yxbj = Convert.ToInt16(newAddedList[i]["yxbj"]);
                    string pfield_mc  =  (newAddedList[i]["field_la"].ToString());
                    string ptop_la = (newAddedList[i]["top_la"].ToString()) ;
                    string pleft_la = (newAddedList[i]["left_la"].ToString()) ;
                    string pwidth_la = (newAddedList[i]["width_la"].ToString()) ;
                    string pheight_la = (newAddedList[i]["height_la"].ToString());
                    string pfont_size = (newAddedList[i]["font_size"].ToString());
        string zb_label = ptop_la + ',' + pleft_la + ',' + pwidth_la + ',' + pheight_la;

                    string pTM = "";
                    if (pfield_mc == "NAME")
                    {
                         pTM = (grid_bottom.DataKeys[rowIndex][0]).ToString();
                    }
                    if (pfield_mc=="BARCODE")
                    {
                         pTM = (grid_bottom.DataKeys[rowIndex][1]).ToString(); 
                    }
                //。。。加字段实现多维度打印。
                    
     sb.AppendLine("   LODOP.ADD_PRINT_TEXT( "+ zb_label +" , '" + pTM + "');");
   sb.AppendLine("   LODOP.SET_PRINT_STYLEA(0, 'FontSize',  '" + pfont_size + "');");
                } 
            } 
           
            sb.AppendLine("    };");
             
            sb.AppendFormat("PrintTable('{0}');", title);
            return sb.ToString();
       //这段代码可作为方法,返回调用的信息。

2、打印按钮,c# +Fineui 后台调用方式

 protected void printdes_Click(object sender, EventArgs e)
        {
            var title = "测式套打方式1";
             PageContext.RegisterStartupScript(GetPrintHtmlJS(title))

         //后台调用JS ,上面的那个方法,红色部分是JS方法名
        }
3、打印格式保存方法,这个写法个人觉得方便。

 protected void grid_savebutton_Click(object sender, EventArgs e)
        {  
            dbpublic dbpub = new dbpublic();
            String sql = String.Empty;
            SqlConnection conn = dbpub.GetConnDB();
            {
                conn.Open();
                SqlTransaction trans = conn.BeginTransaction(); //开始事务
                try
                {    
                    using (SqlCommand comm = new SqlCommand(sql, conn))
                    {
                        comm.Connection = conn;
                        comm.Transaction = trans;
                         
                        List<Dictionary<string, object>> newAddedList = grid_Center.GetNewAddedList();
                        for (int i = 0; i < newAddedList.Count; i++)      //一行一行循环 
                        {
                            sql = "  update   Label_ITEM set top_la='{0}',left_la='{1}',width_la='{2}',height_la='{3}',yxbj='{4}',font_size='{5}'";
                            sql = sql + " where jlbh={6} and field_la='{7}'";
                            string p0 = (newAddedList[i]["top_la"].ToString());
                            string p1 = (newAddedList[i]["left_la"].ToString());
                            string p2 = (newAddedList[i]["width_la"].ToString());
                            string p3 =  (newAddedList[i]["height_la"].ToString());
                            string p4 =  (newAddedList[i]["yxbj"].ToString());
                            string p5 = (newAddedList[i]["font_size"].ToString());
             int p6 = Convert.ToInt16(grid_left.DataKeys[grid_left.SelectedRowIndex][0]);
                            string p7 =  (newAddedList[i]["field_la"].ToString());

                        sql = string.Format(sql, p0, p1, p2, p3, p4, p5, p6,p7);      
                        comm.CommandText = sql;
                        comm.ExecuteNonQuery();
                        }
                    }
                    trans.Commit();   //提交事务 
                }
                catch (Exception ex)
                {
                    //myWeb.DAL.Regulation.SysService.WriteLog(ex);写日志
                    PageBase box = new PageBase();
                    box.ShowNotify(ex.Message);
                    trans.Rollback(); //回滚事条 
                }
                finally
                {
                    trans.Dispose();       //释放连接对象资源
                    conn.Close();

                }
            }
        }

4、打印效果预览

总结,数据库二个表(主从表)存放模板数据,程序打印调用模板打印数据,写法主要面向初学者,希望能对大家有一些帮助。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值