学习笔记(一)Jasperreports+jaspersoft studio+springboot 制作报表

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;

@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

如有错误之处,还请各位大佬指正

 

 

 

 

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值