jaspersoft studio动态图片传输

该文章介绍了如何在Java项目中利用JasperReport和JaspersoftStudio工具动态生成包含客户签字图片的PDF文件。通过在模板中添加Base64编码的图片,然后使用ApacheCommonsCodec库解码并插入到报告中,实现了图片的动态展示。

业务需求简述:在实际业务开发中需要动态生成PDF,其中包含客户签字图片。

技术栈:JasperReport+Jaspersoft Studio软件

动态图片传输流程

  1. jaspersoft studio:拖入image到工作区,选择最后一项点击确定。

  1. jaspersoft studio:创建一个参数,类型为String

  1. jaspersoft studio:将图片与属性进行一个绑定

不选择类型

  1. jaspersoft studio:定义图片解析格式

new ByteArrayInputStream(org.apache.commons.codec.binary.Base64.decodeBase64($P{img}.getBytes()))

  1. JasperReport:对图片进行Base64加密成字符串(apache的Base64)

import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang3.StringUtils;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

/**
 * 将图片转换成为以Base64加密后的字符串
 *
 * @author yin
 */
public class ImageBase64Util {

    public static String getImageBase64ToString(String imgPath) {
        if (StringUtils.isEmpty(imgPath)) {
            return "";
        }
        String imgBase64String = null;
        try {
            File imgFile = new File(imgPath);
            InputStream inputStream = new FileInputStream(imgFile);
            int available = inputStream.available();
            byte[] bytes = new byte[available];
            inputStream.read(bytes);
            imgBase64String = new String(Base64.encodeBase64(bytes));

        } catch (IOException e) {

        }
        return StringUtils.isNotEmpty(imgBase64String) ? imgBase64String : "";
    }

}
  1. JasperReport:按照模板对应加入数据

    public void imgTest() throws JRException {

        String path = "图片地址";

        //要导入的jrxml模板文件路径
        String jrxmlPath = "D:test.jrxml";
        //生成jasper文件路径
        String jasperPath = "D:\\test.jasper";
        //编译模板
        JasperCompileManager.compileReportToFile(jrxmlPath, jasperPath);
        Map<String, Object> map = new HashMap();

        map.put("img", ImageBase64Util.getImageBase64ToString(path));
        List<Map> list = new ArrayList();
        list.add(map);
        //填充数据
        JasperPrint jasperPrint = JasperFillManager.fillReport(jasperPath, map, new JRBeanCollectionDataSource(list));

        //输出文件
        String pdfPath = "D:\\1.pdf";
        JasperExportManager.exportReportToPdfFile(jasperPrint, pdfPath);

    }

需要的jar包

        <!--JasperReport-->
        <dependency>
            <groupId>net.sf.jasperreports</groupId>
            <artifactId>jasperreports</artifactId>
            <version>6.17.0</version>
        </dependency>
        <!--Base64-->
        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
            <version>1.10</version>
        </dependency>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值