码迷,mamicode.com
首页 > Web开发 > 详细

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

时间:2020-01-14 16:23:45      阅读:452      评论:0      收藏:0      [点我收藏+]

标签:orm   image   simple   数据   for   list   样式   XML   manage   

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类如下:

 
  1. package com.jasper.bean;

  2.  
  3. public class Fields {

  4.  
  5. private String field1;

  6. private String field2;

  7. private String field3;

  8. private String field4;

  9. private String field5;

  10. private String field6;

  11. private String field7;

  12. private String field8;

  13.  
  14. //get 和 set方法省略

  15.  
  16. }

 

 
  1. package com.jasper.bean;

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

  4.  
  5. public class ModelTableSource {

  6. /**

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

  8. */

  9. private JRBeanCollectionDataSource tableData;

  10. /**

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

  12. */

  13. private String date;

  14. // get和set方法省略

  15.  
  16. }

 

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.  
  4. String jrxmlPath = request.getServletContext().getRealPath("/")+"/jrxml/DemoReport5.jrxml";

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

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

  7.  
  8. FileInputStream isRef = null;

  9. ServletOutputStream sosRef = null;

  10.  
  11. try {

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

  13. JasperCompileManager.compileReportToFile(jrxmlPath, jasperPath);

  14.  
  15. isRef = new FileInputStream(new File(jasperPath));

  16. sosRef = response.getOutputStream();

  17. //组装list数据源

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

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

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

  21. list.add(fields);

  22. }

  23. ModelTableSource mts = new ModelTableSource();

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

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

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

  27. mlist.add(mts);

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

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

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

  31. } catch (JRException e) {

  32.  
  33. e.printStackTrace();

  34. }finally {

  35. sosRef.flush();

  36. sosRef.close();

  37. }

  38. }

 

 

1.2.3 启动tomcat并访问

技术图片

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

标签:orm   image   simple   数据   for   list   样式   XML   manage   

原文地址:https://www.cnblogs.com/xing-nb/p/12192426.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!