最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

關(guān)于ireport中傳入list的處理方式

 更新時(shí)間:2023年02月14日 10:42:15   作者:ocp114  
這篇文章主要介紹了關(guān)于ireport中傳入list的處理方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

ireport中傳入list的處理

今天在度娘懷里一整天,依然摸不到怎樣處理對于后臺(tái)的list傳到ireport的方法,最后還是踏踏實(shí)實(shí)地亂打亂撞ireport這個(gè)軟件,最后問題竟然解決了,再次貼出來,希望能幫到有需要的朋友。

根據(jù)需求在后臺(tái)創(chuàng)建 list 集合

創(chuàng)建list

給 list 添加元素

給 list 添加元素

把 list 放到需要傳到 ireport 中的參數(shù)集合中

ireport中定義一個(gè) TOTAL_LIST 和上面 param 參數(shù)鍵同名

這里寫圖片描述

修改 TOTAL_LIST 的屬性為 java.util.List

新建變量 INDEX

這里寫圖片描述

修改 INDEX 屬性 默認(rèn)為 0

這里寫圖片描述

把 TOTAL_LIST 拖到需要放置的地方

這里寫圖片描述

把 INDEX 拖到需要放置的地方,這里要和 TOTAL_LIST 同一行

這里寫圖片描述

對著 TOTAL_LIST 的單元格右鍵選 Edit expression

這里寫圖片描述

修改表達(dá)式

這里寫圖片描述

最后保存編譯就 OK 了

iReport簡單使用+實(shí)際應(yīng)用

iReport 是什么

iReport是一個(gè)能夠創(chuàng)建復(fù)雜報(bào)表的開源項(xiàng)目,并且它能調(diào)用JasperReports庫應(yīng)用于任何一種java應(yīng)用程序。本身是分布式的且由符合GNU通用公共許可的百分之百純java編寫。

由于它豐富的圖形界面,能夠很快的創(chuàng)建出任何一種想要的報(bào)表。iReport能夠讓我們提高技術(shù)方面的信心,比如它能降低學(xué)習(xí)JasperReports的XML語法的難度,而且能夠?yàn)槭炀毜募夹g(shù)人員節(jié)省大量的時(shí)間并能開發(fā)出非常精細(xì)的報(bào)表。

一、使用iReport軟件

1. 先創(chuàng)建一個(gè)iReport模板

根據(jù)自己的需要來創(chuàng)建模板(左上角文件->new 進(jìn)行創(chuàng)建)

2.對模板進(jìn)行命名

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

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

4. 創(chuàng)建

5. 靜態(tài)文本框、變量

6. 使用HTML語言

7. 使用背景圖

使用圖片時(shí)java傳參樣例 iReport

new ByteArrayInputStream(new Base64().decodeBase64(new StringBuffer($F{photoBase64}).toString().getBytes("UTF-8")))

java

//ep.getData() 二進(jìn)制類型數(shù)據(jù)
 String s = Base64.getEncoder().encodeToString(ep.getData());
 //轉(zhuǎn)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;

    @Autowired
    public RedisUtil(StringRedisTemplate redisTemplate) {
        this.redisTemplate = redisTemplate;
    }

    /**
     * 設(shè)置過期時(shí)間
     */
    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);
    }
    
    /**
     * 獲取存儲(chǔ)在哈希表中指定字段的值
     */
    public Object hGet(String key, String field) {
        return redisTemplate.opsForHash().get(key, field);
    }

    /**
     * 獲取PDF打印臨時(shí)token
     * @param jasperName 報(bào)表名稱(無需帶后綴)
     * @param pageData 頁面數(shù)據(jù)(非迭代數(shù)據(jù))
     * @param iterationData 迭代數(shù)據(jù)
     * @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使用

先調(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 {

    @Autowired
    private 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 "等待打印時(shí)間超時(shí),請重新操作";
        }
        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());
                }
                // pdf
                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單個(gè))")
    @PostMapping(value = "/getPrintToken")
    public ResponseData getPrintToken(@RequestBody String data){
        JSONObject jsonObject = null;
        try {
            jsonObject = JSON.parseObject(data);
        } catch (Exception e) {
            return ResponseData.warnWithMsg("錯(cuò)誤的JSON格式。");
        }
        if (jsonObject == null) {
            return ResponseData.warnWithMsg("錯(cuò)誤的JSON格式。");
        }
        String planUuids = jsonObject.getString("planUuids");
        String examUuids = jsonObject.getString("examUuids");
        if (StringUtils.isBlank(examUuids)) {
            return ResponseData.warnWithMsg("缺少必要參數(shù)[examUuids]。");
        }
        //ResponseData自己封裝的返回類   printService.getPrintToken:數(shù)據(jù)
        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é)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 200行java代碼實(shí)現(xiàn)2048小游戲

    200行java代碼實(shí)現(xiàn)2048小游戲

    這篇文章主要為大家詳細(xì)介紹了200行java代碼實(shí)現(xiàn)2048小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • SpringCloudStream原理和深入使用小結(jié)

    SpringCloudStream原理和深入使用小結(jié)

    Spring?Cloud?Stream是一個(gè)用于構(gòu)建與共享消息傳遞系統(tǒng)連接的高度可擴(kuò)展的事件驅(qū)動(dòng)型微服務(wù)的框架,本文給大家介紹SpringCloudStream原理和深入使用,感興趣的朋友跟隨小編一起看看吧
    2024-06-06
  • IDEA安裝詳細(xì)步驟(多圖預(yù)警)

    IDEA安裝詳細(xì)步驟(多圖預(yù)警)

    這篇文章主要介紹了IDEA安裝詳細(xì)步驟(多圖預(yù)警),本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Java編程中使用lambda表達(dá)式的奇技淫巧

    Java編程中使用lambda表達(dá)式的奇技淫巧

    這篇文章主要介紹了Java編程中使用lambda表達(dá)式的奇技淫巧,使用Lambda表達(dá)式可以替代只有一個(gè)函數(shù)的接口實(shí)現(xiàn),告別匿名內(nèi)部類,代碼看起來更簡潔易懂,是Java8開始推出的人們期待已久的功能,需要的朋友可以參考下
    2016-03-03
  • 帶你詳細(xì)了解Spring Security的注解方式開發(fā)

    帶你詳細(xì)了解Spring Security的注解方式開發(fā)

    這篇文章主要介紹了詳解spring security四種實(shí)現(xiàn)方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-08-08
  • 基于SpringBoot和Vue3的博客平臺(tái)文章列表與分頁功能實(shí)現(xiàn)

    基于SpringBoot和Vue3的博客平臺(tái)文章列表與分頁功能實(shí)現(xiàn)

    在前面的教程中,我們已經(jīng)實(shí)現(xiàn)了基于Spring Boot和Vue3的發(fā)布、編輯、刪除文章功能。本教程將繼續(xù)引導(dǎo)您實(shí)現(xiàn)博客平臺(tái)的文章列表與分頁功能,需要的朋友可以參考閱讀
    2023-04-04
  • Java Hibernate對象(瞬時(shí)態(tài),持久態(tài),脫管態(tài))詳解

    Java Hibernate對象(瞬時(shí)態(tài),持久態(tài),脫管態(tài))詳解

    這篇文章主要介紹了Java Hibernate對象(瞬時(shí)態(tài),持久態(tài),脫管態(tài))詳解的相關(guān)資料,這里對Java Hibernate對象進(jìn)行了介紹及總結(jié),需要的朋友可以參考下
    2016-11-11
  • Java IO流對象的序列化和反序列化實(shí)例詳解

    Java IO流對象的序列化和反序列化實(shí)例詳解

    這篇文章主要介紹了Java IO流對象的序列化和反序列化實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • 詳細(xì)聊聊JDK中的反模式接口常量

    詳細(xì)聊聊JDK中的反模式接口常量

    這篇文章主要給大家介紹了關(guān)于JDK中反模式接口常量的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用jdk具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-01-01
  • Java設(shè)計(jì)圖形與多媒體處理

    Java設(shè)計(jì)圖形與多媒體處理

    本文主要介紹了Java的圖形設(shè)計(jì)以及多媒體處理,源碼也做了詳細(xì)的注釋,對于初學(xué)者應(yīng)該不難。詳細(xì)請看下文
    2015-09-09

最新評(píng)論

乐平市| 遂溪县| 左云县| 台北市| 金堂县| 澜沧| 西峡县| 石首市| 静安区| 东阳市| 阜新市| 余姚市| 东阿县| 兴和县| 泸水县| 江津市| 德化县| 乃东县| 肥城市| 兰坪| 开封市| 邮箱| 郓城县| 比如县| 阳城县| 名山县| 芷江| 泰顺县| 新津县| 敦煌市| 长岛县| 莎车县| 永嘉县| 开封市| 崇左市| 类乌齐县| 班戈县| 台中县| 新郑市| 靖远县| 新营市|