当前位置:编程学习 > JAVA >>

SpringMVC和JasperReport的集成

本人最近这几天一直在找这方面的资料。可惜网上的资料都是生成为什么格式的。 我有一个需求是,当用户点击菜单后,将查询的数据填充到已经编译的.jasper文件中,然后在列表中显示,然后当用户点击按什么格式导出,在生成什么格式就好了。 可能本人资质愚笨,能力较弱,希望做过这方面的大神能帮忙指点迷津。 跪谢了。。
请不要给我一些网上博客的连接,好多人都是只转不测试,例子都没有能通过测试的。。谢谢。 Spring和JasperReport --------------------编程问答--------------------

//拿到写好的*.jasper 文件
URL reportURL = this.getClass().getClassLoader().getResource(RES_REPORT);
//拿到报表
JasperReport jasperReport = (JasperReport) JRLoader.loadObjectFromLocation(reportURL.toString());

JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, paramMap,new JRBeanCollectionDataSource(new LinkedList()));

JRPdfExporter exporter = new JRPdfExporter();
exporter.setParameter(JRExporterParameter.FONT_MAP, FontConst.DEFAULT_FONT_MAP);
exporter.setParameter(JRExporterParameter.JASPER_PRINT_LIST, printList);
String fileName = "**图"+System.currentTimeMillis()+".pdf";
String filePath = SystemConfig.getReportFolder()+"/"+fileName;
File file = new File(filePath);
exporter.setParameter(JRExporterParameter.OUTPUT_FILE,file);
exporter.exportReport();


这样就完了,我记得导出的都是PDF的,不知道这东西还能导出不同格式 的。对应的jasper 文件里的文本域用MAP就可以,对于List 就直接用List 这屁东西没什么难的。  --------------------编程问答--------------------
引用 1 楼 zcwgogo 的回复:

//拿到写好的*.jasper 文件
URL reportURL = this.getClass().getClassLoader().getResource(RES_REPORT);
//拿到报表
JasperReport jasperReport = (JasperReport) JRLoader.loadObjectFromLocation(reportURL.toString());

JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, paramMap,new JRBeanCollectionDataSource(new LinkedList()));

JRPdfExporter exporter = new JRPdfExporter();
exporter.setParameter(JRExporterParameter.FONT_MAP, FontConst.DEFAULT_FONT_MAP);
exporter.setParameter(JRExporterParameter.JASPER_PRINT_LIST, printList);
String fileName = "**图"+System.currentTimeMillis()+".pdf";
String filePath = SystemConfig.getReportFolder()+"/"+fileName;
File file = new File(filePath);
exporter.setParameter(JRExporterParameter.OUTPUT_FILE,file);
exporter.exportReport();


这样就完了,我记得导出的都是PDF的,不知道这东西还能导出不同格式 的。对应的jasper 文件里的文本域用MAP就可以,对于List 就直接用List 这屁东西没什么难的。 


大哥,你这是直接返回了生成pdf文件。。 我要的不是这个。。 我有一个需求是,当用户点击菜单后,将查询的数据填充到已经编译的.jasper文件中,然后在列表中显示!!! --------------------编程问答-------------------- 我去,把你的数据填进去啊,那上面不是有参数么
--------------------编程问答--------------------
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, paramMap,new JRBeanCollectionDataSource(new LinkedList


这个不就是填数据么?你自己去数据库查询数据的代码还要我写啊
--------------------编程问答--------------------
	List<RowDataDefectMagager> rowdata=new ArrayList<RowDataDefectMagager>();
if (result!=null) {
for (Map<String, Object>  map : result) {
DecimalFormat format = new DecimalFormat(("#####0.00"));
String sum = map.get("sum").toString();
String count = map.get("count").toString();
String sumBefore = map.get("sumBefore").toString();
String countBefore = map.get("countBefore").toString();

Double percentNow = 0d;
if (!"0".equals(sum) && !"0".equals(count)) {
percentNow = Double.valueOf(format.format((Double.valueOf(sum)/Double.valueOf(count))*100));
}
Double percentBefore = 0d;
if (!"0".equals(sumBefore) && !"0".equals(countBefore)) {
percentBefore = Double.valueOf(format.format((Double.valueOf(sumBefore)/Double.valueOf(countBefore))*100));
}

RowDataDefectMagager date=new RowDataDefectMagager();
date.setRow1(map.get("month").toString());
date.setRow2(sum);
date.setRow3(count);
date.setRow4(percentNow+"%");
date.setRow5(percentBefore+"%");
rowdata.add(date);
}
}
JasperPrint rowDataPrint = JasperFillManager.fillReport(jasperReportProduct, paramMap, 
new JRBeanCollectionDataSource(rowdata));


这是个LIST 填充,对应出来的报表就是:

A   1 
B   2 这样的。  --------------------编程问答--------------------
引用 4 楼 zcwgogo 的回复:
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, paramMap,new JRBeanCollectionDataSource(new LinkedList


这个不就是填数据么?你自己去数据库查询数据的代码还要我写啊


你这样返回的是什么? 我的需求是,不要返回文件,因为一个查询,显示的是数据列表。不是文件。 --------------------编程问答-------------------- 笑死 ,jasper 跑完的就是一个PDF文件,要么一个流,或者是一个图片,页面展示这个就好了。

 正常的做法都是在页面 用JSP或者EXTJS JQUERY 这样的框架生成一些图表,然后做些数据的展现,但是当点击导出报表的时候则是根据查询的条件去拿数据然后填充到jasper文件里面下载,所谓的格式选择不过是多种导出方式而已,比如PDF,EXCEL。 --------------------编程问答--------------------
引用 7 楼 zcwgogo 的回复:
笑死 ,jasper 跑完的就是一个PDF文件,要么一个流,或者是一个图片,页面展示这个就好了。

 正常的做法都是在页面 用JSP或者EXTJS JQUERY 这样的框架生成一些图表,然后做些数据的展现,但是当点击导出报表的时候则是根据查询的条件去拿数据然后填充到jasper文件里面下载,所谓的格式选择不过是多种导出方式而已,比如PDF,EXCEL。



不好意思,对这个不是很懂,正在学习。。。。多谢大神给的意见, 跪谢了。方便留个QQ吗? --------------------编程问答--------------------
引用 5 楼 zcwgogo 的回复:
	List<RowDataDefectMagager> rowdata=new ArrayList<RowDataDefectMagager>();
if (result!=null) {
for (Map<String, Object>  map : result) {
DecimalFormat format = new DecimalFormat(("#####0.00"));
String sum = map.get("sum").toString();
String count = map.get("count").toString();
String sumBefore = map.get("sumBefore").toString();
String countBefore = map.get("countBefore").toString();

Double percentNow = 0d;
if (!"0".equals(sum) && !"0".equals(count)) {
percentNow = Double.valueOf(format.format((Double.valueOf(sum)/Double.valueOf(count))*100));
}
Double percentBefore = 0d;
if (!"0".equals(sumBefore) && !"0".equals(countBefore)) {
percentBefore = Double.valueOf(format.format((Double.valueOf(sumBefore)/Double.valueOf(countBefore))*100));
}

RowDataDefectMagager date=new RowDataDefectMagager();
date.setRow1(map.get("month").toString());
date.setRow2(sum);
date.setRow3(count);
date.setRow4(percentNow+"%");
date.setRow5(percentBefore+"%");
rowdata.add(date);
}
}
JasperPrint rowDataPrint = JasperFillManager.fillReport(jasperReportProduct, paramMap, 
new JRBeanCollectionDataSource(rowdata));


这是个LIST 填充,对应出来的报表就是:

A   1 
B   2 这样的。 


弱弱问一下,这个还需要什么配置,代码能给的全一点吗? --------------------编程问答-------------------- 你给个邮箱,我把jasper 的下载代码 和 页面 生成的都发你 --------------------编程问答--------------------
引用 10 楼 zcwgogo 的回复:
你给个邮箱,我把jasper 的下载代码 和 页面 生成的都发你


jie_20@126.com 不胜感激,跪谢! --------------------编程问答-------------------- simson@netease.com
也发个给我,谢谢. --------------------编程问答-------------------- 发个给哥,哥帮你们review下代码
ensignli@sina.com --------------------编程问答--------------------
引用 10 楼 zcwgogo 的回复:
你给个邮箱,我把jasper 的下载代码 和 页面 生成的都发你

大哥也给我发个呗,谢谢了,shimiao3342@163.com,给个能正常运行的例子呗,主要是那个SpringMVC整合JasperReport的配置怎么弄 --------------------编程问答--------------------
引用 楼主 jie_20 的回复:
本人最近这几天一直在找这方面的资料。可惜网上的资料都是生成为什么格式的。 我有一个需求是,当用户点击菜单后,将查询的数据填充到已经编译的.jasper文件中,然后在列表中显示,然后当用户点击按什么格式导出,在生成什么格式就好了。 可能本人资质愚笨,能力较弱,希望做过这方面的大神能帮忙指点迷津。 跪谢了。。
请不要给我一些网上博客的连接,好多人都是只转不测试,例子都没有能通过测试的。。谢谢。

嗨,朋友你解决了嘛,我也有个跟你差不多的需求,能发个例子参考一下么
补充:Java ,  Java EE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,