jasper使用table组件设计复杂的表头

时间:2023-03-09 21:21:24
jasper使用table组件设计复杂的表头

1.1 设计报表模板

1.1.1 新建模板DemoReport5.jrxml,去掉不需要的Band,保留Title,Page Header,Detail 1 , PageFooter。将组件Table拖入到Detail1 中,跳出Dataset窗口。选择 Create .. ,然后Next

jasper使用table组件设计复杂的表头

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

jasper使用table组件设计复杂的表头

jasper使用table组件设计复杂的表头

jasper使用table组件设计复杂的表头

jasper使用table组件设计复杂的表头

1.1.3 只保留Column Header,然后 Finish

jasper使用table组件设计复杂的表头

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

jasper使用table组件设计复杂的表头

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

jasper使用table组件设计复杂的表头

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

jasper使用table组件设计复杂的表头

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

jasper使用table组件设计复杂的表头

将其他三个也如此操作

jasper使用table组件设计复杂的表头

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

jasper使用table组件设计复杂的表头

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

jasper使用table组件设计复杂的表头

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

jasper使用table组件设计复杂的表头

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

jasper使用table组件设计复杂的表头

jasper使用table组件设计复杂的表头

保存模板,并复制到JasperWeb项目中。

1.2 编写Servlet注入数据源

1.2.1 新建Fields类和ModelTableSource类如下:

 
  1. package com.jasper.bean;

  2. public class Fields {

  3. private String field1;

  4. private String field2;

  5. private String field3;

  6. private String field4;

  7. private String field5;

  8. private String field6;

  9. private String field7;

  10. private String field8;

  11. //get 和 set方法省略

  12. }

 
  1. package com.jasper.bean;

  2. import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;

  3. public class ModelTableSource {

  4. /**

  5. * 注入table组件的数据源

  6. */

  7. private JRBeanCollectionDataSource tableData;

  8. /**

  9. * 当前时间(查询时间)

  10. */

  11. private String date;

  12. // get和set方法省略

  13. }

1.2.2 新建JasperServlet5 ,doGet内容如下:

 
  1. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

  2. Map<String,Object> parameters = new HashMap<String,Object>(16);

  3. String jrxmlPath = request.getServletContext().getRealPath("/")+"/jrxml/DemoReport5.jrxml";

  4. //由jrxml文件编译后生产jasper文件的路径

  5. String jasperPath = request.getServletContext().getRealPath("/")+"/jasper/DemoReport5.jasper";

  6. FileInputStream isRef = null;

  7. ServletOutputStream sosRef = null;

  8. try {

  9. //编译jrxml生产jasper文件

  10. JasperCompileManager.compileReportToFile(jrxmlPath, jasperPath);

  11. isRef = new FileInputStream(new File(jasperPath));

  12. sosRef = response.getOutputStream();

  13. //组装list数据源

  14. List<Fields> list = new ArrayList<Fields>();

  15. for(int i = 1 ; i <= 20; i++) {

  16. 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));

  17. list.add(fields);

  18. }

  19. ModelTableSource mts = new ModelTableSource();

  20. mts.setDate(new SimpleDateFormat("yyyy-MM-dd").format(new Date()));

  21. mts.setTableData(new JRBeanCollectionDataSource(list));

  22. List<ModelTableSource> mlist = new ArrayList<ModelTableSource>();

  23. mlist.add(mts);

  24. //new JRBeanCollectionDataSource(list) 以javaBean为数据源注入报表数据

  25. JasperRunManager.runReportToPdfStream(isRef, sosRef, parameters, new JRBeanCollectionDataSource(mlist));

  26. response.setContentType("application/pdf");

  27. } catch (JRException e) {

  28. e.printStackTrace();

  29. }finally {

  30. sosRef.flush();

  31. sosRef.close();

  32. }

  33. }

1.2.3 启动tomcat并访问

jasper使用table组件设计复杂的表头