天天看点

jasper studio不同数据源的导出情况jasper导出相关

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名称就可以知道大意

最后希望小伙伴们有什么问题给我评论,大家一起学习