ireport报表打印(3)

今天来说一个使用ireport进行报表打印的实例。打印的模板绘制如下图:
这里写图片描述
对于模板的简单解释:
(1)这个报表打印模板分两部分:page Header域和Detail域
(2)其中固定文本,我采用的是组件Static text,字体采用的是宋体,加粗采用的是微软雅黑字体。
(3)$F{field}是动态显示的文本,采用的是组件TextField。对于这些field,我在报表绘制的左侧的field中添加对应的实体属性名,这些属性名也与我java后台打印的vo中的属性名字保持一致。
(4)表格是通过组件Line来画出来的。
相关代码展示:
(1)JSP中的打印相关代码如下所示:

 function daYin(){
		 //前端框架我们采用的miniUI,所以在点击打印按钮的时候,我们必须先校验一下是否有数据可以打印,如果没有数据,我们就会给出相应的警告!
        var allsize= grid.getTotalCount();
        if(allsize <= 0){
	        mini.alert("无数据可以打印");
	        return false;
        }
        //打印时,传相应的查询数据条件进行后台查询对应的数据。
        var ksnd= mini.get("qsrqS").getValue();
		var jsnd = mini.get("qsrqE").getValue();
		var ksjd = mini.get("jd1").getValue();
		var jsjd = mini.get("jd2").getValue();
		var ssqx = mini.get("qx").getValue();
		var gxjg = mini.get("jg").getValue();
		//我们将查询条件拼接为一个字符串,然后去后台进行处理
		var str = ksnd+','+ ksjd+','+ jsnd+','+ jsjd+','+ ssqx+','+ gxjg;
		//执行后台打印逻辑
			var printActionUrl =" ${ctx}/printTjbbEtmz/print?str="+str;
			//将后台打印的逻辑查询的数据显示在打印预览界面
			printActionUrl = encodeURIComponent(printActionUrl);
			var action="${ctx}/common/daYin?printActionUrl="+printActionUrl;
			mini.open({
				url: action,
				//设置打印预览界面的高度和宽度
				title: "儿童门诊打印", width: 810, height: 630,
				ondestroy: function (action) {
					search();
				}
			});
		}
    }
encodeURIComponent = function(uriComponent) {};//EcmaScript中的js方法

采用的是SSM,后台的处理逻辑如下所示

	@RequiresUser
    @RequiresPermissions("权限标识符")
    @RequestMapping(value = "print",method = RequestMethod.POST)
    @ResponseBody
    public void print(HttpServletRequest request,HttpServletResponse response){
    //接收查询条件参数
        String str = request.getParameter("str");
        String[] array = str.split(",");
        String ssqx =  null;
        String gxjg = null;
        if(array.length == 6){//参数全传
            ssqx =  array[4];
            gxjg = array[5];
        }else if(array.length == 5){
            ssqx = array[4];
        }
        String kssj  = array[0]+array[1];
        String jssj  = array[2]+array[3];
        //查询打印数据
        List<PrintTjbbEtmzVo>  printList = printTjbbEtmzService.query(kssj,jssj,ssqx,gxjg);
        //对于年度和季度的业务处理
        for(int i=0;i<printList.size();i++){
            if(Integer.parseInt(array[0]) == Integer.parseInt(array[2])){
                printList.get(i).setNf(array[0]+"年");
                if(Integer.parseInt(array[1]) == Integer.parseInt(array[3])){
                    printList.get(i).setJd("第"+array[3]+"季度");
                }else{
                    printList.get(i).setJd("第"+array[1]+"-"+array[3]+"季度");
                }
            }else{
                printList.get(i).setNf(array[0]+"-"+array[2]+"年");
                printList.get(i).setJd("第"+array[1]+"-"+array[3]+"季度");
            }
            //对于填报单位的处理 
			           printList.get(i).setTbdw(FnsUtils.getHospitalByCode(FnsUtils.getUser().getOrgCode())+"(盖章)");
			 //空值处理,避免界面打印出来null这样的空值
            dealWithNull(printList.get(i));
        }
        //调用打印方法,传入三个参数,list,封装的数据,第二个参数是你打印模板的名字,后面两个参数分别是request和response.
        PrintUtil.print(printList, "printEtmz.jrxml", request, response); //打印数据
    }

对于空值的处理,
(1)前面一篇文章说过,可以采用在模板中绘制的时候将TextField组件的属性print when null勾选,这样如果是null的话,就会自动将null处理掉,并且界面就不会显示null这样的值
(2)或者在JAVA后台进行处理null值,代码如下所示:

private void dealWithNull(PrintTjbbEtmzVo printTjbbEtmzVo) {
        if (printTjbbEtmzVo.getDwfzr() == null){
            printTjbbEtmzVo.setDwfzr("");
        }
 }

后台的相关SQL就不展示了,打印的共通方法会在打印相关总结完以后来写另外一篇博文。
总结
1、这个打印是一种情况,画一个简单的报表模板进行打印
2、主要采用了组件是Line,TextField和Static text,字体加粗采用的是微软雅黑字体
3、对于空值null的处理及打印前台后的交互

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值