Jasper(2)——简单使用导出PDF报表

接着上一次所说的,没看过的可跳转
Jasper(1)——入门

第一阶段:初步导出PDF

Jasper报表设计

点击 Static Text,并拖动到 title 位置
在这里插入图片描述
然后双击此框,根据需要修改,可看下图
在这里插入图片描述
修改好后可以调一下蓝线(各个band的高度)或者如图所示
在这里插入图片描述
或者如下图修改
在这里插入图片描述
接着Page Header我随便弄了点中文,跟title差不多
在弄Column Header和Detail部分之前,先做点东西~
outline视图,右键field -> Create Field
你会看到如下图的亚子
在这里插入图片描述
比如我这个field是id,类型为Integer,看String是不符的,因此如下图操作
在这里插入图片描述
这样,id列名就创好啦~接下来如法炮制,创建name和school列名,两者都是String类型在这里插入图片描述
接下来,我们把它们拖动到Detail部分,然后慢慢调整弄整齐
PS:拖到Detail的时候,Column Header也对应有一个框(Static Text)!
在这里插入图片描述
其实,看到图中,是否会有问“$F{id}”是啥意思?
其实Detail的框是Text Field,双击一看,如图
在这里插入图片描述
Column Footer我就随便写了哈,不展示了
Page Footer一般是写页码之类的,我就用个函数,如下图所示
在这里插入图片描述
Summary部分我这边加一个入参,这个入参创建参考上面的field即可
在这里插入图片描述
这样一个报表就完成啦~可以预先浏览
在这里插入图片描述
在这里插入图片描述
这里就是对应该xml的源码
在这里插入图片描述
编译该文件
在这里插入图片描述
这样设计报表部分完成!

Java代码导出部分

本次我用Springboot来进行pdf导出
文件目录大概是这样
在这里插入图片描述
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>

    <groupId>org.example</groupId>
    <artifactId>jasperdemo</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.8</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <dependency>
            <groupId>net.sf.jasperreports</groupId>
            <artifactId>jasperreports</artifactId>
            <version>5.6.1</version>
            <exclusions>
                <exclusion>
                    <groupId>org.olap4j</groupId>
                    <artifactId>olap4j</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.olap4j</groupId>
            <artifactId>olap4j</artifactId>
            <version>0.9.7.309-JS-3</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.itextpdf/itextpdf -->
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itextpdf</artifactId>
            <version>5.5.11</version>
        </dependency>


        <!-- https://mvnrepository.com/artifact/jfree/jcommon -->
        <dependency>
            <groupId>jfree</groupId>
            <artifactId>jcommon</artifactId>
            <version>1.0.15</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/jfree/jfreechart -->
        <dependency>
            <groupId>jfree</groupId>
            <artifactId>jfreechart</artifactId>
            <version>1.0.12</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.codehaus.groovy/groovy-all -->
        <dependency>
            <groupId>org.codehaus.groovy</groupId>
            <artifactId>groovy-all</artifactId>
            <version>2.0.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.16</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</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>

本次我将用模拟数据来演示,创建一个Student类

package com.copa.domain;

import lombok.AllArgsConstructor;
import lombok.Data;

/**
 * @author copa
 * @createDate 2021-07-25 21:51
 * @function
 */
@Data
@AllArgsConstructor
public class Student {

    private Integer id;

    private String name;

    private String school;
}

controller

package com.copa.controller;

import com.copa.domain.Student;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import org.springframework.core.io.ClassPathResource;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

/**
 * @author copa
 * @createDate 2021-07-25 21:02
 * @function 导出pdf
 */
@RestController
public class TestController {

    @RequestMapping(value = "/pdf1")
    public void pdf1(Map<String, Object> parameters,
                                        HttpServletResponse response) throws IOException {
        ServletOutputStream os = response.getOutputStream();
        try {
            ArrayList<Student> list = new ArrayList<>();
            for (int i = 1; i <= 40; i++) {
                list.add(new Student(i, "copa" + i, i <= 20 ? "一中" : "二中"));
            }
            JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(list);
            parameters = parameters == null ? new HashMap<>() : parameters;
            parameters.put("summary", "我是summary~");
            ClassPathResource resource = new ClassPathResource("jasper/demo1.jasper");
            response.setContentType("application/pdf");
            InputStream jasperStream = resource.getInputStream();
            JasperPrint jasperPrint = JasperFillManager.fillReport(jasperStream, parameters, dataSource);
            JasperExportManager.exportReportToPdfStream(jasperPrint, os);
        } catch (JRException e) {
            e.printStackTrace();
        } finally {
            os.flush();
        }
    }
}

那么,启动项目,查看效果
http://localhost:8080/pdf1
在这里插入图片描述
看起来…好像没边框很别扭,那么我们返回去加边框
在这里插入图片描述
重新编译,覆盖文件,再次尝试~
在这里插入图片描述
这样,边框就出来了~但是,有没有看到有些内容没显示的o(╥﹏╥)o
这是…中文的问题…因为Jasper它没考虑到中文,查看它的源码可知
请添加图片描述

第二阶段:解决中文问题

首先,从网上找字体,比如下图
在这里插入图片描述
然后这里添加字体
在这里插入图片描述
在这里插入图片描述
这样就添加好字体了,然后给显示中文的都换上这个字体
在这里插入图片描述
然后编译并覆盖
在java代码这一块,创建下图几个文件
在这里插入图片描述
ttf文件是你在报表设计时用到的字体文件
font.xml

<?xml version="1.0" encoding="UTF-8"?>
<fontFamilies>
    <fontFamily name="是微软雅黑吖">
        <normal>jasper/fonts/msyh.ttf</normal>
        <bold>jasper/fonts/msyh.ttf</bold>
        <italic>jasper/fonts/msyh.ttf</italic>
        <boldItalic>jasper/fonts/msyh.ttf</boldItalic>
        <pdfEncoding>Identity-H</pdfEncoding>
        <pdfEmbedded>true</pdfEmbedded>
        <exportFonts>
            <export key="net.sf.jasperreports.html">'是微软雅黑吖', Arial, Helvetica, sans-serif</export>
            <export key="net.sf.jasperreports.xhtml">'是微软雅黑吖', Arial, Helvetica, sans-serif</export>
        </exportFonts>
    </fontFamily>
</fontFamilies>

jasperreports_extension.properties

net.sf.jasperreports.extension.registry.factory.simple.font.families=net.sf.jasperreports.engine.fonts.SimpleFontExtensionsRegistryFactory
net.sf.jasperreports.extension.simple.font.families.dejavu=jasper/fonts/fonts.xml

添加完成后,再次运行
http://localhost:8080/pdf1
这样就成功啦~
在这里插入图片描述
底部也对应显示~
在这里插入图片描述
这样导出PDF报表就完成啦~
O(∩_∩)O~
项目地址:https://gitee.com/copaa/jasperdemo
导航栏:
Jasper(3)——制作图表报表
Jasper(4)——制作分组报表
Jasper(5)——制作父子报表
Jasper(6)——小技巧& 各种bug(有缘再补充)

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,我可以回答你关于jasperreports生成报表的问题。jasperreports是一款Java开发的报表工具,可以帮助开发者快速生成各种格式的报表。它提供了多种报表元素,如文本、图像、表格等,可以通过简单的配置来生成报表。此外,jasperreports还支持多语言和多种数据源的连接,非常方便实用。 ### 回答2: JasperReports是一个用于生成报表的开源Java库。它通过使用XML文件定义报表模板,将数据源中的数据填充到模板中,并生成输出格式多样的报表。JasperReports可以生成PDF、HTML、XLS、CSV等多种格式的报表使用JasperReports来生成报表一般需要以下几个步骤: 1. 定义报表模板:使用JasperSoft Studio等工具创建或编辑报表模板文件,模板文件以XML格式保存。在模板中,可以指定报表的布局、样式、数据源等信息。 2. 设计数据源:JasperReports支持多种数据源,包括SQL查询、JavaBean、XML文件等。根据实际情况选择合适的数据源,并编写对应的代码或SQL查询语句。 3. 填充数据:通过代码将数据源中的数据填充到报表模板中。可以使用Java代码或JasperReports提供的API来实现数据的填充操作。 4. 生成报表:将填充完数据的报表模板导出为指定的输出格式,如PDF、HTML、XLS等。 使用JasperReports生成报表的好处是灵活性高、可扩展性强。通过使用XML模板定义报表的布局和样式,可以很方便地对报表进行编辑和修改。同时,JasperReports提供了丰富的API和工具,可以满足各种不同的报表生成需求。此外,JasperReports还支持自定义的报表元素和样式,可以根据实际情况进行个性化定制。 总之,JasperReports是一款功能强大且易于使用报表生成工具,可以帮助开发人员快速、灵活地生成各种格式的报表。无论是简单报表还是复杂的报表,都可以通过JasperReports来实现。 ### 回答3: Jasper Reports是一种开源的Java报表生成工具,它可以帮助开发者快速、灵活地生成各种格式的报表。Jasper Reports提供了强大的报表设计工具,开发者可以使用该工具来设计报表模板,设置样式、布局等元素,并通过XML文件进行导出、导入和共享。 Jasper Reports报表生成过程包括三个关键步骤:数据源准备、报表设计和导出。 首先,需要准备数据源。Jasper Reports支持多种数据源,包括数据库、XML文件、Java对象等。开发者可以根据需要选择相应的数据源,通过查询或组装数据,为报表提供数据内容。 接下来,进行报表设计。开发者可以使用Jasper Reports提供的可视化报表设计工具,通过拖拽和设置属性的方式,创建报表模板。在模板中,可以添加文本、图片、表格、图表等元素,并设置相应的样式和布局。还可以通过添加参数、变量、数据源和子报表等功能,实现更为复杂的报表设计。 最后,进行报表导出。通过调用Jasper Reports提供的API,可以将报表导出为多种格式,如PDF、Excel、HTML、XML等。开发者可以根据需求选择合适的导出格式,并通过设置相应的参数,对导出报表进行格式美化和内容调整。 总的来说,Jasper Reports是一个功能强大、灵活易用的报表生成工具。它通过提供报表设计工具和API,支持多种数据源和导出格式,为开发者提供了丰富的报表设计和生成的功能。无论是简单的表格报表还是复杂的图表分析,Jasper Reports都能满足开发者的需求,并为用户提供清晰、美观的报表展示。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值