Java报表学习札记之 JasperReports iReport(4)

再回过头来看预览的报表,注意到序号这一列乱掉了,由于我们的SQL是按照准考证号asc升序排列,所以用Oracle的rownum做序号仿佛有些不合适,不过没关系,iReport也自带了类似的序号功能!我们通过添加变量(Variables)来实现。首先我们需要先创建一个新的变量,在左侧的Inspector区域找到Variables并new一个Variable命名为rownumber:

这里写图片描述

关于变量(Variables)我们可以在官方文档的Chapter 6中找到它的相关说明:

这里写图片描述

首先我们定义这个变量的类型为java.lang.Integer,Caculation设置为Count,Reset type设置为Report:

这里写图片描述

可以看到Reset type设置为Report时变量只会为初始化1次,并且是使用intital value expression的值作为初始值,那么我们将intital value expression设置为1即可,如下图:

这里写图片描述

最后设置变量表达式(Variable Expression)为$V{rownumber}.valueOf(1)即可。现在修改序号的Text Filed,将原来引用域改为引用变量rownumber,之后再次预览看看效果:

这里写图片描述

可以看到序号可以正常显示!至此我们的报表部分就算开发完成了,接下来看看如何在Java程序中调用报表。

java调用报表

和帆软的FineReport有些区别,帆软是将报表服务器的servlet封装在了jar包中我们只需要在web.xml中引用即可,但JasperReports就需要我们自己来写了,思路都是一样的,直接看代码:

package net.xnzz.servlet; import java.io.File; import java.io.IOException; import java.sql.Connection; import java.util.Enumeration; import java.util.HashMap; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import net.sf.jasperreports.engine.JRException; import net.sf.jasperreports.engine.JasperRunManager; import net.xnzz.util.DBUtils; public class JRPDFServlet extends HttpServlet { private static final long serialVersionUID = 1L; public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Connection connection = DBUtils.getDBInstance().getInitDBConnection(); try { //据据jasper文件生成JasperPrint对象 ServletContext context = this.getServletConfig().getServletContext(); String fileName = request.getParameter("fileName");//ireport编译文件:*.jasper(由模板文件*.jrxml文件编译生成) File reportFile = new File(context.getRealPath("/WEB-INF/jaspers/"+fileName)); HashMap<String, Object> parameters = new HashMap<String, Object>();//给报表模板文件传参 //得到枚举类型的参数名称,参数名称若有重复的只能得到第一个--获取页面传来的参数,和模板中文件的sql参数名称一一对应 Enumeration<?> temp = request.getParameterNames(); while (temp.hasMoreElements()) { String paramName = (String) temp.nextElement(); String paramValue = request.getParameter(paramName); parameters.put(paramName, paramValue); } byte[] bytes = JasperRunManager.runReportToPdf(reportFile.getPath(), parameters,connection); response.setContentType("application/pdf"); response.setContentLength(bytes.length); ServletOutputStream out = response.getOutputStream(); out.write(bytes, 0, bytes.length); out.flush(); out.close(); } catch (JRException e) { e.printStackTrace(); } } }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/290c6cc58d623503765b3b241c5396f5.html