业务需求简述:在实际业务开发中需要动态生成PDF,其中包含客户签字图片。
技术栈:JasperReport+Jaspersoft Studio软件
动态图片传输流程:
jaspersoft studio:拖入image到工作区,选择最后一项点击确定。
jaspersoft studio:创建一个参数,类型为String
jaspersoft studio:将图片与属性进行一个绑定
不选择类型
jaspersoft studio:定义图片解析格式
new ByteArrayInputStream(org.apache.commons.codec.binary.Base64.decodeBase64($P{img}.getBytes()))
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 : "";
}
}
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>