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

安装完成后主界面

spring boot图表项目 springboot报表工具_Springboot

本文使用MySQL作为数据源,主要制作一个表格和柱形图同时存在的模板,并通过springboot + Jasperreports导出为PDF、Excel、Word等文档

处理报表中的中文显示问题

在设计报表之前,为了处理之后生成的PDF等文档中文乱码或者中文不显示等问题。

点击Window -》Preferences -》在搜索框搜索font

spring boot图表项目 springboot报表工具_spring boot图表项目_02

点击add

spring boot图表项目 springboot报表工具_Jaspersoft studio_03

点击Finish

开始设计报表

创建项目

首先 File -》New -》Project

spring boot图表项目 springboot报表工具_Jasperreports_04

选择JasperReports Project,点击Next

spring boot图表项目 springboot报表工具_Springboot_05

为自己的项目起个名字,点击Finish

再工具的左上方找到自己刚创建的项目

spring boot图表项目 springboot报表工具_Jaspersoft studio_06

连接MySQL数据库

spring boot图表项目 springboot报表工具_spring boot图表项目_07

点击小图标

spring boot图表项目 springboot报表工具_Springboot_08

点击Next

spring boot图表项目 springboot报表工具_Jaspersoft studio_09

点击Next

spring boot图表项目 springboot报表工具_Springboot_10

为链接取一个名字,并正确填写连接数据库的信息。点击Driver Classpath

spring boot图表项目 springboot报表工具_报表_11

添加MySQL驱动,点击Test

spring boot图表项目 springboot报表工具_Springboot_12

测试连接成功

点击Finish

spring boot图表项目 springboot报表工具_报表_13

可以看到项目下出现了一个.xml文件

创建模板

点击reportDemo1,右键New -》Jasper report

spring boot图表项目 springboot报表工具_Jasperreports_14

选择一个模板,点击Next

spring boot图表项目 springboot报表工具_Springboot_15

选中项目,同时为模板文件起一个名字。如report.jrxml,点击Finish

在工具左下方找到刚创建的模板

spring boot图表项目 springboot报表工具_报表_16

创建数据集

右键report1 -》Create Dataset

spring boot图表项目 springboot报表工具_spring boot图表项目_17

点击Next

spring boot图表项目 springboot报表工具_Jasperreports_18

选择刚创建的连接名

spring boot图表项目 springboot报表工具_报表_19

编写sql语句,查询所需数据,点击Outline,点击Next

spring boot图表项目 springboot报表工具_spring boot图表项目_20

将需要用到的字段移至右边,点击Next

spring boot图表项目 springboot报表工具_Jasperreports_21

根据什么字段分组,这个根据自己需要添加,点击Finish

正式开始编写模板

模板界面

spring boot图表项目 springboot报表工具_spring boot图表项目_22

因为制作的是表格和柱形图同一模板,所以只留下Summary区域,其他区域删除

spring boot图表项目 springboot报表工具_Jaspersoft studio_23

红框中的,右键Delete

spring boot图表项目 springboot报表工具_Jaspersoft studio_24

只剩下Summary区域,在工具右上角找到

添加table控件

spring boot图表项目 springboot报表工具_Jasperreports_25

点击向下翻页,找到table,并将table左键拖动至Summary区域

spring boot图表项目 springboot报表工具_Springboot_26

选中刚创建的数据集,点击Next

spring boot图表项目 springboot报表工具_报表_27

点击Next

spring boot图表项目 springboot报表工具_Jasperreports_28

点击Next

spring boot图表项目 springboot报表工具_Springboot_29

点击Finish

spring boot图表项目 springboot报表工具_报表_30

点击Preview预览

spring boot图表项目 springboot报表工具_spring boot图表项目_31

显示错误,点击Design返回,然后在工具右下角点击Report

spring boot图表项目 springboot报表工具_spring boot图表项目_32

再点击Preview预览

spring boot图表项目 springboot报表工具_Jasperreports_33

出现数据

点击table

spring boot图表项目 springboot报表工具_报表_34

单击选中单元格,逐个修改字体大小以及样式

spring boot图表项目 springboot报表工具_报表_35

其余单元格,逐一修改,修改后预览

spring boot图表项目 springboot报表工具_Springboot_36

添加柱形图

spring boot图表项目 springboot报表工具_报表_37

将Chart控件左键拖入Summary区域

spring boot图表项目 springboot报表工具_Jasperreports_38

选择Bar Chart 点击Next

spring boot图表项目 springboot报表工具_spring boot图表项目_39

点击Finish

spring boot图表项目 springboot报表工具_Springboot_40

点击Preview预览

spring boot图表项目 springboot报表工具_Jasperreports_41

spring boot图表项目 springboot报表工具_报表_42

右键点击report1.jrxml -》Compile Report,生成report1,.jasper文件

spring boot图表项目 springboot报表工具_Springboot_43

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>

项目目录结构

spring boot图表项目 springboot报表工具_报表_44

控制器代码

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();*/

    }
}

application.properties

server.port=8080

spring.http.encoding.charset=utf-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver