jasper不同数据源的导出问题
- jasper导出相关
-
- 用JSON作为数据源
- 用java中的List作为数据源
- 用sql查询结果作为数据源
- 最后的设置和生成
- 最后希望小伙伴们有什么问题给我评论,大家一起学习
jasper导出相关
jasper report导出的相关内容在网上也有很多了,但是很多博客或者材料上都有一大堆不相关的代码,而我只是想快速的知道怎么正确使用api来实现即可。这里写一个针对和我一个想法的朋友们的jasper文档,也总结一下最近的学习内容。
jasper的导出,一般就是选择数据源,然后将数据源通过
JasperFillManager.fillReport()
的方式添加到JasperPrint中,这个JasperPrint就是已经按照你自己刻画的模板填好数据的实例。
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperFile, paramMap,jsonDataSource);
第一个参数jasperFile是你的模板文件,第二个参数是想要传入你模板中的Parameters参数,是一个Map类型,如果你的模板中不需要其他参数,可以传一个空的map进来,最后一个就是你的数据源的类型。
用JSON作为数据源
1、在jasper studio中创建一个新的report,report的数据源选择JsonDataSource,然后创建你Json中包含的字段field。
2、在java代码中,需要将你的Json数据存放到jasper对应的Json数据源,
JRDataSource jsonDataSource = new JsonDataSource(new ByteArrayInputStream(value.getBytes("UTF-8")));
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperFile, paramMap,jsonDataSource);
因为我的应用中,是直接将导出的excel下载,所以我在JsonDataSource中直接传值为字节流,也可以是Json的数据文件等,同时还可以追加一个参数,在jasper官网中叫做选择表达式,其实就是选择json中的具体字段。
用java中的List作为数据源
1、在jasper studio中创建一个新的report,report的数据源选择JRBeanArrayDataSource,然后创建你Json中包含的字段field。
2、在java代码中,将你的数据list存放到jasper对应的javaBean数据源中
JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(list);
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperFile, paramMap,ds);
用sql查询结果作为数据源
1、用sql查询结果作为数据源相对来说麻烦一点,但是可以在japser studio中直接看到数据填充时的精确状态,这个也是优势,不需要伪造数据源来调整样式,可以直接用真实的数据来显示。
2、首先在jasper studio中设置数据adapter,配置好连接的数据库,在report上右键选择
data set and query
,在左上角选择你刚建好的adapter,然后在sql文本框中输入你的sql语句得到结果集。并按照你的格式展示。
3、在java代码中,利用sql查询来实现的情况下,需要一个建立JDBC连接的过程,接下来只需要将连接放入jasper提供的api中即可,因为模板中已经包含了查询的语句,这样就创建好了数据源。
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperFile, paramMap,connection);
最后的设置和生成
JRXlsExporter xlsExporter = new JRXlsExporter();
xlsExporter.setExporterInput(SimpleExporterInput.getInstance(sheets));
xlsExporter.setExporterOutput(new SimpleOutputStreamExporterOutput(ouputStream));
SimpleXlsReportConfiguration configuration = new SimpleXlsReportConfiguration();
configuration.setOnePagePerSheet(true);
configuration.setRemoveEmptySpaceBetweenColumns(true);
configuration.setWhitePageBackground(false);
// configuration.setSheetNames(sheetNames.toArray(new String[0]));
//设置表格列根据字段类型显示格式.
configuration.setDetectCellType(true);
xlsExporter.setConfiguration(configuration);
xlsExporter.exportReport();
第一行是选择你要导出的格式,我是导出excel,所以用JRXlsExporter
第二行确定输入,即前面的jasperPrint,如果是多sheet页的excel,可以传入一个jasperPrint数组(sheets)
第三行是输出,采用了流的方式输出
剩下的是表格样式配置,看api名称就可以知道大意