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
安装过程很简单,一直下一步就行,这里不做过多描述。工具下载地址:Jaspersoft® Studio | Jaspersoft Community
安装完成后主界面
本文使用MySQL作为数据源,主要制作一个表格和柱形图同时存在的模板,并通过springboot + Jasperreports导出为PDF、Excel、Word等文档
处理报表中的中文显示问题
在设计报表之前,为了处理之后生成的PDF等文档中文乱码或者中文不显示等问题。
点击Window -》Preferences -》在搜索框搜索font
点击add
点击Finish
开始设计报表
创建项目
首先 File -》New -》Project
选择JasperReports Project,点击Next
为自己的项目起个名字,点击Finish
再工具的左上方找到自己刚创建的项目
创建模板
点击reportDemo1,右键New -》Jasper report
选择一个模板,点击Next
选中项目,同时为模板文件起一个名字。如report.jrxml,点击Finish
在工具左下方找到刚创建的模板
正式开始编写模板
模板创建界面比较简单,此处不加以赘述!!!!
pom.xml
<!--jasper-->
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports</artifactId>
<version>6.16.0</version>
</dependency>
<dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext</artifactId>
<version>2.1.7</version>
</dependency>
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports-fonts</artifactId>
<version>6.16.0</version>
</dependency>
项目目录结构
控制器代码
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;
@RestController
public 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();*/
}
}