jaspersoft studio工具:Jaspersoft Studio是JasperReports库和JasperReports服务器的基于Eclipse的报告设计器;它可以作为Eclipse插件或作为独立的应用程序使用。Jaspersoft Studio允许您创建包含图表,图像,子报表,交叉表等的复杂布局。您可以通过JDBC,TableModels,JavaBeans,XML,Hibernate,大数据(如Hive),CSV,XML / A以及自定义来源等各种来源访问数据,然后将报告发布为PDF,RTF, XML,XLS,CSV,HTML,XHTML,文本,DOCX或OpenOffice。
Jasperreports:JasperReport是一个强大、灵活的报表生成工具,能够展示丰富的页面内容,并将之转换成PDF,HTML,或者XML格式。该库完全由Java写成,可以用于在各种Java应用程序,包括J2EE,Web应用程序中生成动态内容。
安装jaspersoft studio
安装过程很简单,一直下一步就行,这里不做过多描述。工具下载地址:https://community.jaspersoft.com/project/jaspersoft-studio/releases
安装完成后主界面
本文使用MySQL作为数据源,主要制作一个表格和柱形图同时存在的模板,并通过springboot +Jasperreports导出为PDF、Excel、Word等文档
处理报表中的中文显示问题
在设计报表之前,为了处理之后生成的PDF等文档中文乱码或者中文不显示等问题。
点击Window -》Preferences -》在搜索框搜索font
点击add
点击Finish
开始设计报表
创建项目
首先 File -》New -》Project
选择JasperReports Project,点击Next
为自己的项目起个名字,点击Finish
再工具的左上方找到自己刚创建的项目
连接MySQL数据库
点击小图标
点击Next
点击Next
为链接取一个名字,并正确填写连接数据库的信息。点击Driver Classpath
添加MySQL驱动,点击Test
测试连接成功
点击Finish
可以看到项目下出现了一个.xml文件
创建模板
点击reportDemo1,右键New -》Jasper report
选择一个模板,点击Next
选中项目,同时为模板文件起一个名字。如report.jrxml,点击Finish
在工具左下方找到刚创建的模板
创建数据集
右键report1 -》Create Dataset
点击Next
选择刚创建的连接名
编写sql语句,查询所需数据,点击Outline,点击Next
将需要用到的字段移至右边,点击Next
根据什么字段分组,这个根据自己需要添加,点击Finish
正式开始编写模板
模板界面
因为制作的是表格和柱形图同一模板,所以只留下Summary区域,其他区域删除
红框中的,右键Delete
只剩下Summary区域,在工具右上角找到
添加table控件
点击向下翻页,找到table,并将table左键拖动至Summary区域
选中刚创建的数据集,点击Next
点击Next
点击Next
点击Finish
点击Preview预览
显示错误,点击Design返回,然后在工具右下角点击Report
再点击Preview预览
出现数据
点击table
单击选中单元格,逐个修改字体大小以及样式
其余单元格,逐一修改,修改后预览
添加柱形图
将Chart控件左键拖入Summary区域
选择Bar Chart 点击Next
点击Finish
点击Preview预览
右键点击report1.jrxml -》Compile Report,生成report1,.jasper文件
pom.xml
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.5.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.nassoft</groupId> <artifactId>demoreport1</artifactId> <version>0.0.1-SNAPSHOT</version> <name>demoreport1</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>net.sf.jasperreports</groupId> <artifactId>jasperreports</artifactId> <version>6.6.0</version> </dependency> <dependency> <groupId>com.kevin</groupId> <artifactId>myfont</artifactId> <version>1.0.0</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.17</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build></project>
项目目录结构
控制器代码
package com.nassoft.demoreport1.controller;import net.sf.jasperreports.engine.*;import net.sf.jasperreports.engine.export.JRRtfExporter;import net.sf.jasperreports.engine.export.JRXlsExporter;import net.sf.jasperreports.engine.util.JRLoader;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.core.io.ClassPathResource;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.sql.DataSource;import java.io.File;import java.io.InputStream;import java.io.OutputStream;import java.util.HashMap;import java.util.Map;@RestControllerpublic class DemoReport1 { @Autowired private DataSource dataSource; @RequestMapping("/{reportName}") public void demoReport1(@PathVariable("reportName") final String reportName, @RequestParam(required = false) Map<String, Object> parameters, HttpServletResponse response, HttpServletRequest request) throws Exception{ parameters = parameters == null ? new HashMap<>() : parameters; //获取文件流 ClassPathResource resource = new ClassPathResource("jaspers" + File.separator + reportName + ".jasper"); InputStream jasperStream = resource.getInputStream(); JasperReport jasperReport = (JasperReport) JRLoader.loadObject(jasperStream); JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, dataSource.getConnection()); //在线预览PDF response.setContentType("application/pdf"); response.setHeader("Content-Disposition", "inline;"); final OutputStream outputStream = response.getOutputStream(); JasperExportManager.exportReportToPdfStream(jasperPrint, outputStream); //生成pdf文档 /*String fileName = "F:/filename.pdf"; JasperExportManager.exportReportToPdfFile(jasperPrint,fileName);*/ //生成word文档 /* String fileName = "F:/filename.doc"; JRRtfExporter docExporter = new JRRtfExporter(); docExporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME,fileName); docExporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); docExporter.exportReport();*/ //生成excel文档 /*JRXlsExporter excel = new JRXlsExporter(); System.out.println(request.getServletContext().getRealPath("jaspers/demoreport1.jasper")); String fileName = "F://filename.xls"; excel.setParameter(JRExporterParameter.OUTPUT_FILE_NAME,fileName); excel.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); excel.exportReport();*/ }}
application.properties
server.port=8080spring.http.encoding.charset=utf-8spring.http.encoding.enabled=truespring.http.encoding.force=truespring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8spring.datasource.username=rootspring.datasource.password=rootspring.datasource.driver-class-name=com.mysql.jdbc.Driver