PDF报表操作04~~使用JasperReport制作动态报表(数据库交互)案例

1. 需求

2. 数据直接从数据库中获取

2.1 制作模板

2.1.1 创建新模板,删除不需要的Band

在这里插入图片描述

2.1.2 配置数据连接

使用JDBC数据源填充数据:使用Jaspersoft Studio 先要配置一个数据库连接
填写数据源的类型,选择“DatabaseJDBC Connection”

在这里插入图片描述
在这里插入图片描述

1.给创建的这个数据连接起个名字
2.根据数据库选择驱动类型;
Jaspersoft Studio 已经内置了很多常用数据库的驱动,使用的时候直接选就可以了。当然,如果这还满足不了你的话,你还可以添加你指定的 JDBC 驱动 jar 包。

选择完数据库和驱动后测试以下,如果不通过请选择相应的jar包
在这里插入图片描述
c
测试如果失败,请选择对应驱动的jar包
在这里插入图片描述
如果时MySql请自行导入jar包
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.1.3 读取表中属性

左下角右击模板名称选择 Dataset and Query

在这里插入图片描述

选择刚才配置的数据源

在这里插入图片描述

查询表数据

在这里插入图片描述
点击“OK”按钮

左下角的Fields中就有了我们想要的属性字段了

在这里插入图片描述

2.1.4 模板如下

修改标题,并且要使用华文宋体
双击空白处,可以自适应大小

在这里插入图片描述
效果预览
在这里插入图片描述

2.2 编译后的.jasper放入到项目中

在这里插入图片描述
在这里插入图片描述

2.3 测试代码

2.3.1 Controller中添加方法
@GetMapping(value = "/downLoadPDF",name = "导出PDF")
public void  downLoadPDF(HttpServletResponse response) throws Exception{
    userService.downLoadPDFByDB(response);
}
2.3.1 Service添加方法
	@Autowired
    private HikariDataSource hikari;

    public void downLoadPDF(HttpServletResponse response) throws Exception {
        //1.获取模板文件  获取项目的更目录
        File rootFile = new File(ResourceUtils.getURL("classpath:").getPath());
        File templateFile = new File(rootFile,"/pdf_template/DataAndModel.jasper");
        //2.准备数据库的链接
        Map params = new HashMap();
        JasperPrint jasperPrint = JasperFillManager.fillReport(new FileInputStream(templateFile),params,hikari.getConnection() );

        ServletOutputStream outputStream = response.getOutputStream();
        String filename= "用户列表数据.pdf";
        response.setContentType("application/pdf");
        response.setHeader("content-disposition","attachment:filename="+new String(filename.getBytes(),"ISO-8859-1"));
        //3.打印
        JasperExportManager.exportReportToPdfStream(jasperPrint,outputStream);
    }

2.4 效果图

在这里插入图片描述

3. 数据从后台获取

从上面效果来看,导出的日期格式有问题,其实数据库表中的数据很多情况下都需要做一些业务处理才能被使用的,所以再学习一下数据经过处理后再导出。

3.1. 创建模板

3.1.1 创建新模板,删除不需要的Band

在这里插入图片描述

3.1.2 创建4个field

这4个field的名称要和User实体类中的属性名称要保持一致
在这里插入图片描述
在这里插入图片描述

3.2. 编译后的.jasper放入到项目中

在这里插入图片描述

3.3 修改UserController中的代码

	//导出pdf
    @GetMapping("/downLoadPDF")
    public void downLoadPDF(HttpServletResponse response) throws Exception {
        //userService.downLoadPDF(response);
        userService.downLoadPDF02(response);
    }

3.4 完成UserService代码

 	@JsonIgnore     //转json时不考虑这个字段
    @Transient      //表示非数据库字段
    private String hireDateStr; //日期
 public void downLoadPDF02(HttpServletResponse response)throws Exception {
        //1.获取模板文件  获取项目的更目录
        File rootFile = new File(ResourceUtils.getURL("classpath:").getPath());
        File templateFile = new File(rootFile,"/pdf_template/UserList.jasper");
        //2.准备数据库的链接
        Map params = new HashMap();
        List<User> users = userMapper.selectAll();
        //给hirDateStr赋值
        users = users.stream().map(user -> {
            user.setHireDateStr(new SimpleDateFormat("yyyy-MM-dd").format(user.getHireDate()));
            return user;
        }).collect(Collectors.toList());

        //将JasperPrint已PDF的形式输出
        JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(users);
        JasperPrint jasperPrint = JasperFillManager.fillReport(new FileInputStream(templateFile),params,dataSource);

        //获取输出流
        ServletOutputStream outputStream = response.getOutputStream();
        //设置导入名称
        String filename= "用户列表数据.pdf";
        //设置导出的字符编码
        response.setContentType("application/pdf");
        response.setHeader("content-disposition","attachment:filename="+new String(filename.getBytes(),"ISO-8859-1"));
        //3.打印
        JasperExportManager.exportReportToPdfStream(jasperPrint,outputStream);
 }

3.5 效果图

在这里插入图片描述

4. 导出用户详细信息

4.1 创建模板

4.1.1 创建空模板

在这里插入图片描述

4.1.2 创建parameter在这里插入图片描述
4.1.3 设置模板基本信息

在这里插入图片描述

4.1.4 选择图片

弹出 create new image element选择Image creation mode 中的最后一个No image

在这里插入图片描述

选中刚才添加的image . 在右侧Properties -> Image中,Expression 设置刚才定义的photo

在这里插入图片描述

4.2 把编译后的模板放入到项目中

在这里插入图片描述

4.3 代码实现

修改UserController中下载个人信息的方法

    //导出用户详细信息
    @GetMapping("/download")
    public void downLoadUserInfoWithTempalte(Long id, HttpServletResponse response, HttpServletRequest request) throws Exception{
        userService.downLoadUserInfoPDF(id,request,response);
    }

在UserService中添加方法

	public void downLoadUserInfoPDF(Long id, HttpServletRequest request, HttpServletResponse response) throws Exception{
        //1.获取模板文件  获取项目的更目录
        File rootFile = new File(ResourceUtils.getURL("classpath:").getPath());
        File templateFile = new File(rootFile,"/pdf_template/userInfo.jasper");
        //2.准备数据库的链接
        User user = userMapper.selectByPrimaryKey(id);
        Map<String, Object> params = EntityUtils.entityToMap(user);
        params.put("salary",user.getSalary().toString());

        //将JasperPrint已PDF的形式输出
        JasperPrint jasperPrint = JasperFillManager.fillReport(new FileInputStream(templateFile),params,new JREmptyDataSource());

        //获取输出流
        ServletOutputStream outputStream = response.getOutputStream();
        //设置导入名称
        String filename= "用户详细数据.pdf";
        //设置导出的字符编码
        response.setContentType("application/pdf");
        response.setHeader("content-disposition","attachment:filename="+new String(filename.getBytes(),"ISO-8859-1"));
        //3.打印
        JasperExportManager.exportReportToPdfStream(jasperPrint,outputStream);
    }

4.4 效果图

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

自学之路←_←

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值