您的位置:首页 > 编程语言 > ASP

Java(Springmvc)报表小记之 JasperReports & iReport导出excel(超详细)

2020-01-14 14:40 1301 查看

在网上找了许多ireport的用法的教程,有一些写的乱七八糟,还有代码拷进去有的报红的地方,然后引用的东西也没放出来,各种不能用。这个应该是最详细的了,从安装到使用,但是它的java调用报表的代码有点问题,除了java代码其余都可参考。
https://www.cnblogs.com/HeXiaoZhou/p/8485100.html
接下来开始讲解
流程图:

流程解析:

第一步:填充文件
JasperPrint
可以用JasperFillManager生成JasperPrint对象,jrprint文件,jrprint文件流
该类的一个实例代表一个面向页面的文档,该文档可以查看,打印或导出为其他格式。
当用数据填充报表设计时,引擎会生成此类的实例,并且可以通过网络进行传输,以序列化形式存储在磁盘上或导出为其他各种格式,例如PDF,HTML,XLS,CSV或XML。

第二步:设置excel属性
1. XlsReportConfiguration
公共接口XlsReportConfiguration,扩展了ReportExportConfiguration,包含Excel导出器使用的设置的界面。

第三步:文件导出
1. JRXlsExporter
继承于JRXlsAbstractExporter
JRXlsExporter 是 jasperReport的Excel 导出器。如果要导出pdf,用JRPdfExporter类,还可以导出cvs,rtf,xml,docx,pptx,html等格式的文件。
导出过程始终通过调用接口的exportReport()方法 来调用Exporter,并且此方法在调用时不接收任何参数。

2. ExporterInput和OutputStreamExporterOutput
net.sf.jasperreports.export包下的接口,该包主要提供导出程序输入,导出程序输出和导出程序配置。输入开始之前,所谓的导出程序输入将提供导出程序可能需要的所有输入数据。

具体讲解JRXlsExporter导出器:

JRXlsExporter导出器
软件包net.sf.jasperreports.engine.export的描述
出口商输入:
导出程序的输入数据以一个或多个JasperPrint 对象的形式出现,这些对象必须与其他可选的导出设置一起导出为其他某种文档格式。这些 JasperPrint 对象可能已经在内存中,通过输入流来自网络或驻留在磁盘上的文件中。我们所需要的只是一个ExporterInput拥有必要输入数据的实例。

出口商输出:
具体取决于它们产生的输出类型,使用public void setExporterOutput(O exporterOutput) 来设置所有内置导出器的输出设置。
其他导出配置设置:
可以使用public void setConfiguration(C configuration)和 public void setConfiguration(RC configuration)从JRAbstractExporter父类继承的 其他导出配置设置传达给导出器 。第一种方法接受一个ExporterConfiguration参数,并为每个导出器应用设置。第二个接受ReportExportConfiguration并在批量导出中为每个导出的报告应用设置。

安装和使用可以参考开头给的链接,在本地生成jasper文件之后,然后用java代码去调用的话,我用的是springmvc调用的,上代码和原出处
首先是pom.xml依赖包:

pom.xml

<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.0.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports</artifactId>
<version>6.3.0</version>
</dependency>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<version>2.4.5</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.12</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.5</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.5</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.5</version>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.4.1212</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-jaxb-annotations</artifactId>
<version>2.9.5</version>
</dependency>

</dependencies>

Controller层代码(每一块是什么含义请看下方原出处链接,我就不敲了)

@RequestMapping("/excel")
public void exportExcel(HttpServletRequest request, HttpServletResponse response) throws JRException, IOException {
try {
Class.forName("org.postgresql.Driver");
String url="jdbc:postgresql://连接信息:5432/数据库名";
String username="连接名";
String password="密码";
try {
Connection conn= DriverManager.getConnection(url,username,password);
//传递参数
Map<String,Object> rptParameters=new HashMap<>();
//填充文件
JasperPrint jasperPrint=JasperFillManager.fillReport("E:/ireport/table_test.jasper",rptParameters,conn);
System.out.println(rptParameters.toString());
System.out.println("jasperPrint:"+jasperPrint);
//excel属性设置
SimpleXlsxReportConfiguration conf=new SimpleXlsxReportConfiguration();
//一页一个sheet
conf.setOnePagePerSheet(Boolean.FALSE);
//删除记录最下面的空行
conf.setRemoveEmptySpaceBetweenRows(Boolean.FALSE);
//显示边框,背景白色
conf.setWhitePageBackground(Boolean.FALSE);
//xls格式文件导出器
JRXlsExporter exporter=new JRXlsExporter();
exporter.setConfiguration(conf);
//从数据库中返回的结果 输入项
ExporterInput exporterInput=new SimpleExporterInput(jasperPrint);
exporter.setExporterInput(exporterInput);
//Excel文件  输出项
OutputStreamExporterOutput exporterOutput=new SimpleOutputStreamExporterOutput("E:/ireport/table.xls");
exporter.setExporterOutput(exporterOutput);
exporter.exportReport();
} catch (SQLException e) {
e.printStackTrace();
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}

然后直接访问页面就可以在路径生成xls文件
代码出处:https://www.geek-share.com/detail/2713440331.html

可用可参考,有问题留言

  • 点赞 1
  • 收藏
  • 分享
  • 文章举报
过期fluoxetine 发布了17 篇原创文章 · 获赞 3 · 访问量 496 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: