jasper使用table组件设计复杂的表头
1.1 设计报表模板
1.1.1 新建模板DemoReport5.jrxml,去掉不需要的Band,保留Title,Page Header,Detail 1 , PageFooter。将组件Table拖入到Detail1 中,跳出Dataset窗口。选择 Create .. ,然后Next

1.1.2 给Dataset命名。选择 Createnew dateset ... ,然后Next




1.1.3 只保留Column Header,然后 Finish

1.1.4 点击Detail中的Table组件进入到Table界面中。

1.1.5 在Column Header中右键Column1 选择Create Column After,生成4个Column

1.1.6 一般表头都是 合并列的复杂表头。选择Column1 右键 -》 Group Columns

在Columns[1]中的Column1右键Create Column after ,显示如下:

将其他三个也如此操作

1.1.7 将组件Text Field 拖入表格中,并设置表头名

1.1.8 在dateset1中新建Field属性,并拖入到Table的Detail中,设置字体样式(这里自定义命名Filed,且注意类型)

1.1.9 返回到Main Report ,新建Fields 命名为table Data,设置Class为JRBeanCollectionDataSource,注意写全路径,新建一个Field为Date,Class为String

1.1.10 点击Main Report 的Detail中的Table,显示Properties后,点击DataSet,选中Use a JRDatasource expression,将新建tableData写入。


保存模板,并复制到JasperWeb项目中。
1.2 编写Servlet注入数据源
1.2.1 新建Fields类和ModelTableSource类如下:
-
package com.jasper.bean; -
public class Fields { -
private String field1; -
private String field2; -
private String field3; -
private String field4; -
private String field5; -
private String field6; -
private String field7; -
private String field8; -
//get 和 set方法省略 -
}
-
package com.jasper.bean; -
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; -
public class ModelTableSource { -
/** -
* 注入table组件的数据源 -
*/ -
private JRBeanCollectionDataSource tableData; -
/** -
* 当前时间(查询时间) -
*/ -
private String date; -
// get和set方法省略 -
}
1.2.2 新建JasperServlet5 ,doGet内容如下:
-
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { -
Map<String,Object> parameters = new HashMap<String,Object>(16); -
String jrxmlPath = request.getServletContext().getRealPath("/")+"/jrxml/DemoReport5.jrxml"; -
//由jrxml文件编译后生产jasper文件的路径 -
String jasperPath = request.getServletContext().getRealPath("/")+"/jasper/DemoReport5.jasper"; -
FileInputStream isRef = null; -
ServletOutputStream sosRef = null; -
try { -
//编译jrxml生产jasper文件 -
JasperCompileManager.compileReportToFile(jrxmlPath, jasperPath); -
isRef = new FileInputStream(new File(jasperPath)); -
sosRef = response.getOutputStream(); -
//组装list数据源 -
List<Fields> list = new ArrayList<Fields>(); -
for(int i = 1 ; i <= 20; i++) { -
Fields fields = new Fields("field"+i,"field"+(i+1),"field"+(i+2),"field"+(i+3),"field"+(i+4),"field"+(i+5),"field"+(i+6),"field"+(i+7)); -
list.add(fields); -
} -
ModelTableSource mts = new ModelTableSource(); -
mts.setDate(new SimpleDateFormat("yyyy-MM-dd").format(new Date())); -
mts.setTableData(new JRBeanCollectionDataSource(list)); -
List<ModelTableSource> mlist = new ArrayList<ModelTableSource>(); -
mlist.add(mts); -
//new JRBeanCollectionDataSource(list) 以javaBean为数据源注入报表数据 -
JasperRunManager.runReportToPdfStream(isRef, sosRef, parameters, new JRBeanCollectionDataSource(mlist)); -
response.setContentType("application/pdf"); -
} catch (JRException e) { -
e.printStackTrace(); -
}finally { -
sosRef.flush(); -
sosRef.close(); -
} -
}
1.2.3 启动tomcat并访问


浙公网安备 33010602011771号