iReport简单使用+实际应用

iReport 是什么

iReport是一个能够创建复杂报表的开源项目,并且它能调用JasperReports库应用于任何一种java应用程序。本身是分布式的且由符合GNU通用公共许可的百分之百纯java编写。
由于它丰富的图形界面,能够很快的创建出任何一种想要的报表。iReport能够让我们提高技术方面的信心,比如它能降低学习JasperReports的XML语法的难度,而且能够为熟练的技术人员节省大量的时间并能开发出非常精细的报表。

一、使用iReport软件

1. 先创建一个iReport模板

根据自己的需要来创建模板(左上角文件->new 进行创建)

2.对模板进行命名

Repoet name:模板名
Location:文件存放地址
File:模板文件全路径

3. 下一步 -> finish完成新建

4. 创建

5. 静态文本框、变量

6. 使用HTML语言

7. 使用背景图

使用图片时java传参样例

iReport
new ByteArrayInputStream(new Base64().decodeBase64(new StringBuffer($F{photoBase64}).toString().getBytes("UTF-8")))
java
//ep.getData() 二进制类型数据String s = Base64.getEncoder().encodeToString(ep.getData());//转base64//String base64 = ep.getBase64Header() + "," + s;if (ep.getData() == null){throwMsg("无照片,请先上传");}e.put("photoBase64", ep.getData());

二、java Demo示例

1. redisUtil工具类

import com.alibaba.fastjson.JSON;
import com.bjupi.utils.Utils;
import com.hyjs.examination.manage.system.action.PdfController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;@Component
public class RedisUtil {private final StringRedisTemplate redisTemplate;@Autowiredpublic RedisUtil(StringRedisTemplate redisTemplate) {this.redisTemplate = redisTemplate;}/*** 设置过期时间*/public Boolean expire(String key, long timeout, TimeUnit unit) {return redisTemplate.expire(key, timeout, unit);}public void hPut(String key, String hashKey, String value) {redisTemplate.opsForHash().put(key, hashKey, value);}/*** 获取存储在哈希表中指定字段的值*/public Object hGet(String key, String field) {return redisTemplate.opsForHash().get(key, field);}/*** 获取PDF打印临时token* @param jasperName 报表名称(无需带后缀)* @param pageData 页面数据(非迭代数据)* @param iterationData 迭代数据* @return* @throws Exception*/public String getPdfToken(String jasperName, Map<String,Object> pageData, List<Map<String,Object>> iterationData){String token = Utils.createUid();hPut(PdfController.PDF_PRINT+token, PdfController.JASPER_NAME,jasperName);if(pageData != null && pageData.size() > 0) {hPut(PdfController.PDF_PRINT+token, PdfController.PAGE_DATA, JSON.toJSONString(pageData));}if(iterationData != null && iterationData.size() > 0) {hPut(PdfController.PDF_PRINT+token, PdfController.ITERATION_DATA, JSON.toJSONString(iterationData));}expire(PdfController.PDF_PRINT+token, 300, TimeUnit.SECONDS);return token;}}

2. controller使用

先调用 /getPrintToken 得到token
再将token作为参数传入/public/pdf-v1

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.hyjs.examination.manage.dict.ResponseData;
import io.swagger.annotations.ApiOperation;
import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.util.JRLoader;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.ClassPathResource;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;import com.hyjs.examination.manage.util.RedisUtil;import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;@Component
public class PdfController {@Autowiredprivate RedisUtil redisUtil;//路径名称public static final String JASPERS_LOCAL = "jaspers";public static final String PDF_PRINT = "PDF:";public static final String JASPER_NAME = "JASPER_NAME";public static final String PAGE_DATA = "PAGE_DATA";public static final String ITERATION_DATA = "ITERATION_DATA";@ApiOperation("PDF打印v1版本")@GetMapping(value = "/public/pdf-v1")public String getReportByParam(@RequestParam String token, HttpServletResponse response) {if (StringUtils.isBlank(token)) {return "缺少必要参数[token]";}Object o = redisUtil.hGet(PDF_PRINT + token, JASPER_NAME);if (o == null || StringUtils.isBlank(o.toString())) {return "等待打印时间超时,请重新操作";}String jasperName = o.toString();String pageData = null;Object o1 = redisUtil.hGet(PDF_PRINT + token, PAGE_DATA);if (o1 != null) {pageData = JSON.toJSONString(o1);}String iterationData = null;Object o2 = redisUtil.hGet(PDF_PRINT + token, ITERATION_DATA);if (o2 != null) {iterationData = o2.toString();}return getReportByParam(jasperName, pageData, iterationData, response);}private String getReportByParam(String jasperName, String pageData, String iterationData, HttpServletResponse response) {String msg = "";if (StringUtils.isBlank(jasperName)) {msg = "缺少必要参数[jasperName]";} else {ClassPathResource resource = new ClassPathResource(JASPERS_LOCAL + File.separator + jasperName + ".jasper");InputStream jasperStream = null;List<Map<String, Object>> data = new ArrayList<>();try {if (StringUtils.isNotBlank(iterationData)) {List<Map<String, Object>> list1 = JSON.parseObject(iterationData, new TypeReference<List<Map<String, Object>>>() {});if (list1 != null && list1.size() > 0) {data.addAll(list1);}}JSONObject page = null;if (StringUtils.isNotBlank(pageData)) {page = JSONObject.parseObject(pageData);}if (page != null) {if (data.size() > 0) {for (Map<String, Object> mapInner : data) {mapInner.putAll(page);}} else {data.add(page);}}JRDataSource source = new JRBeanCollectionDataSource(data);jasperStream = resource.getInputStream();JasperReport jasperReport = (JasperReport) JRLoader.loadObject(jasperStream);JasperPrint jasperPrint = null;if (data.size() > 0) {jasperPrint = JasperFillManager.fillReport(jasperReport, null, source);} else {jasperPrint = JasperFillManager.fillReport(jasperReport, null, new net.sf.jasperreports.engine.JREmptyDataSource());}// pdfresponse.setContentType("application/pdf");response.setHeader("Content-Disposition", "inline;");OutputStream outputStream = response.getOutputStream();JasperExportManager.exportReportToPdfStream(jasperPrint, outputStream);} catch (Exception e) {e.printStackTrace();msg = e.getMessage();}}return msg;}@ApiOperation("给考生打印证书(批量or单个)")@PostMapping(value = "/getPrintToken")public ResponseData getPrintToken(@RequestBody String data){JSONObject jsonObject = null;try {jsonObject = JSON.parseObject(data);} catch (Exception e) {return ResponseData.warnWithMsg("错误的JSON格式。");}if (jsonObject == null) {return ResponseData.warnWithMsg("错误的JSON格式。");}String planUuids = jsonObject.getString("planUuids");String examUuids = jsonObject.getString("examUuids");if (StringUtils.isBlank(examUuids)) {return ResponseData.warnWithMsg("缺少必要参数[examUuids]。");}//ResponseData自己封装的返回类   printService.getPrintToken:数据ResponseData examPrintDatas = printService.getPrintToken(planUuids, examUuids);List<Map<String, Object>> printInfoDatas = (List<Map<String, Object>>)examPrintDatas.getData();String jasperName = jsonObject.getString("jasperName");if (StringUtils.isBlank(jasperName)) {return ResponseData.warnWithMsg("缺少必要参数[jasperName]。");}String token = redisUtil.getPdfToken(jasperName, null, printInfoDatas);return ResponseData.success(token);}}

3. pom

     <!--jasper--><dependency><groupId>net.sf.jasperreports</groupId><artifactId>jasperreports</artifactId><version>6.6.0</version></dependency>

iReport简单使用相关推荐

  1. ireport简单报表打印

    目录 1. ireport连接Oracle数据库 2. ireport简单报表打印 1.ireport面板属性 1.title:只在整个报表的第一页的最上面部分显示,除了第一页外,不管报表有几个页面, ...

  2. iReport报表开发

    目录 0.前言 1. 环境搭建 1.1软件下载 1.2java环境 1.3  iReport-5.6.0安装 1.3.1安装目录 1.3.2 iReport简单说明 2iReport的常识 2.2软件 ...

  3. ireport的简单使用(数据表格)报表

    如果出现ireport打不开的问题正常都是因为JDK版本太高了,百度下如何简单,很容易的 首先:文件->new,选择Blank A4,Open this template 2.取个名字,选择下保 ...

  4. java使用ireport生成报表_JasperReport(3)——Java简单使用IReport生成的文件建立报表...

    先看看设计的报表样式: reportTitle是新添加的一个参数,而其他的id和name是通过数据源得到的Filed.IReport在设置参数的时候需要先在左边新建一个parameter,然后再把该p ...

  5. 使用ireport设计jasperreport报表模板,以及简单的设计使用案例

    1.了解ireport与jasperreport的区别. 2.怎样使用ireport绘制报表模板. 3.了解ireport的几个概念. 4.ireport的深入探讨. 1.ireport 是一个专门用 ...

  6. 【报表技术】IReport 图形化报表开发工具安装教程

    [报表技术]IReport 图形化报表开发工具安装教程 JasperReport简单介绍 JasperReport是一个强大.灵活的报表生成工具,能够展示丰富的页面内容,并将之转换成PDF,HTML, ...

  7. JasperReport学习笔记2-创建简单的报表例子

    http://www.iteye.com/topic/399750 一,创建简单的jrxml文件 Xml代码   <?xml version="1.0"?> <! ...

  8. iReport 4.1 报表、子报表、主从报表、合计、实例解析

    开发使用步骤(iReport 4.1.1) 1.      开发使用步骤(iReport4.1)... 2 4.1.       JasperReport 和iReport的介绍... 2 4.1.1 ...

  9. jasperreports_JasperReports JSF插件用例–简单列表报告

    jasperreports 这是JasperReports JSF插件系列的第一篇"用例文章" ,我将专注于一个简单的需求,并且我将进一步深入. 起点是我们已经为图书商店完成的项目 ...

  10. JasperReports JSF插件用例–简单列表报告

    这是JasperReports JSF插件系列的第一篇"用例文章" ,我将专注于一个简单的需求,并且我将进一步深入. 起点是我们已经为图书商店完成的项目设置,我将向其中添加一个列表 ...

最新文章

  1. go语言实现图片合成
  2. 一个SAP UI5 TreeTable控件的错误分析
  3. php curlopt_postfields,PHP的CURLOPT_POSTFIELDS参数使用数组和字符串的区别 - CSDN博客
  4. Spring框架学习笔记01:初探Spring——采用Spring配置文件管理Bean
  5. asp.net listview 字段太多 滚动条_人生有太多身不由己,回头看看最对不起的就是自己...
  6. in function ‘int main()’_如果 main 函数的末尾没有 return 语句将会有什么影响
  7. [LeetCode] Android Unlock Patterns 安卓解锁模式
  8. [linux]centOS 7.6 安装ntp
  9. How Do I? Videos for Devices
  10. Windows下安装Redis图文教程
  11. SPFA算法(最短路径算法)
  12. Mac OS 简易U盘重装系统 亲测
  13. 如何更换计算机cpu风扇,cpu风扇怎么拆下来 cpu风扇正确拆卸方法图解
  14. linux系统下查看服务器品牌型号序列号
  15. gradle --refresh-dependencies cleanEclipse eclipse
  16. Nginx+SpringBoot实现负载均衡demo
  17. 桌面缓存服务器,primocache 把内存虚拟成硬盘缓存的硬盘优化软件
  18. 程序员必须认识的5件事情(ipvb学习网)
  19. 给Dynamics 365 on-premises版本 配置Exchange Server 2016邮件服务器
  20. Q1季度出货量排名全球第四 国产品牌OPPO产品力与研发实力获认可

热门文章

  1. java 项目骨架,maven项目中骨架
  2. 如何在64位win7中使用未有签名的驱动程序
  3. 用php 用拼出一个菱形_用php语言编程:输出一个由“*”符号组成的菱形图形(必须使用for循环语句)...
  4. 程序员学炒股(3) 个股和大盘的关系之二
  5. 超实用的容器镜像漏洞检测工具 Trivy 入门指南
  6. [译] 利用 Immutability(不可变性)编写更为简洁高效的代码
  7. missing privilege separation directory /var/empty/sshd问题解决
  8. 46zTree - Metro 风格的左侧菜单
  9. 程序员如何学习Hadoop大数据培训
  10. 远程车控怎么玩?来,我教你..