生活随笔
收集整理的這篇文章主要介紹了
iReport简单使用
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
iReport簡單使用+實際應用
iReport 是什么
iReport是一個能夠創(chuàng)建復雜報表的開源項目,并且它能調(diào)用JasperReports庫應用于任何一種java應用程序。本身是分布式的且由符合GNU通用公共許可的百分之百純java編寫。
由于它豐富的圖形界面,能夠很快的創(chuàng)建出任何一種想要的報表。iReport能夠讓我們提高技術(shù)方面的信心,比如它能降低學習JasperReports的XML語法的難度,而且能夠為熟練的技術(shù)人員節(jié)省大量的時間并能開發(fā)出非常精細的報表。
一、使用iReport軟件
1. 先創(chuàng)建一個iReport模板
根據(jù)自己的需要來創(chuàng)建模板(左上角文件->new 進行創(chuàng)建)
2.對模板進行命名
Repoet name:模板名
Location:文件存放地址
File:模板文件全路徑
3. 下一步 -> finish完成新建
4. 創(chuàng)建
5. 靜態(tài)文本框、變量
6. 使用HTML語言
7. 使用背景圖
使用圖片時java傳參樣例
iReport
new ByteArrayInputStream(new Base64().decodeBase64(new StringBuffer($F{photoBase64}).toString().getBytes("UTF-8")))
java
String s
= Base64.getEncoder().encodeToString(ep
.getData());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
);}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使用
先調(diào)用 /getPrintToken 得到token
再將token作為參數(shù)傳入/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 "缺少必要參數(shù)[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
= "缺少必要參數(shù)[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());}response
.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("缺少必要參數(shù)[examUuids]。");}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("缺少必要參數(shù)[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>
總結(jié)
以上是生活随笔為你收集整理的iReport简单使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。