1.jsp页面
<button class=" btn btn-info" onclick="getIds();" >
<i class="icon-qrcode" aria-hidden="true" > 打印二维码</i>
</button>
function getIds() {
var checkedNum = getGridCheckedNum("#grid-table-c","id");
if (checkedNum == 0) {
layer.alert("请选择要生成二维码的详情单!");
return false;
}else {
var selectid = jQuery("#grid-table-c").jqGrid("getGridParam", "selarrrow");
$.post(context_path + "/materielBindRfid/matrixCode?ids=" + selectid, {},
function (str) {
$queryWindow = layer.open({
title: "二维码",
type: 1,
skin: "layui-layer-molv",
area: ["650px", "600px"],
shade: 0.6,
moveType: 1,
content: str,
success: function (layero, index) {
layer.closeAll("loading");
}
});
}).error(function () {
layer.closeAll();
layer.msg("加载失败!", {icon: 2});
});
}
}
2.controller层
/**
* 二维码打印
*/
@RequestMapping(value = "/matrixCode")
@ResponseBody
public ModelAndView tomatrixCode(String ids) {
ModelAndView mv = this.getModelAndView();
//跳转地址
mv.setViewName("techbloom/stock/materielBindRfid_matrixCode");
List<Long> lstid = Arrays.stream(ids.split(",")).map(a ->
Long.parseLong(a)).collect(Collectors.toList());
//根据绑定单详情ID获取需要生成二维码的信息
List<MaterielBindRfidDetail> materielBindRfidDetailList =
materielBindRfidDetailService.selectBatchIds(lstid);
//存储数据的集合
List<Map<String, Object>> matrixCodeList = new ArrayList<>();
//判断根据id获取的入库单详情集合是否为空
if (!materielBindRfidDetailList.isEmpty()) {
for (MaterielBindRfidDetail materielBindRfidDetail : materielBindRfidDetailList)
{
Map<String, Object> map = new HashMap<>();
//二维码内容/宽/高/
String text = materielBindRfidDetail.getMaterielCode() + "," + materielBindRfidDetail.getMaterielName() + "," + materielBindRfidDetail.getBatchRule() + ","
+ materielBindRfidDetail.getAmount() + materielBindRfidDetail.getUnit() + "/" + materielBindRfidDetail.getWeight() + "kg";
String binary =
QrCodeUtils.creatRrCode(text, 400, 400);
map.put("binary", binary);
map.put("materielCode", materielBindRfidDetail.getMaterielCode());
map.put("materielName", materielBindRfidDetail.getMaterielName());
map.put("batchNo", materielBindRfidDetail.getBatchRule());
map.put("amount", materielBindRfidDetail.getAmount() + materielBindRfidDetail.getUnit());
map.put("weight", materielBindRfidDetail.getWeight() + "kg");
matrixCodeList.add(map);
}
}
//放入页面数据
mv.addObject("matrixCodeList", matrixCodeList);
return mv;
}
3.二维码生成工具类
package com.tbl.common.utils;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
import sun.misc.BASE64Encoder;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Hashtable;
/**
* 二维码生成工具类
*/
public class QrCodeUtils {
/**
* 二维码图片输出
*
* @param contents 二维码的内容
* @param width 二维码图片宽度
* @param height 二维码图片高度
* @return
* @author yuany
* @date 2019-03-29
*/
public static String creatRrCode(String contents, int width, int height) {
String binary = null;
Hashtable hints = new Hashtable();
hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
try {
BitMatrix bitMatrix = new MultiFormatWriter().encode(
contents, BarcodeFormat.QR_CODE, width, height, hints);
// 1、读取文件转换为字节数组
ByteArrayOutputStream out = new ByteArrayOutputStream();
BufferedImage image = toBufferedImage(bitMatrix);
//转换成png格式的IO流
ImageIO.write(image, "png", out);
byte[] bytes = out.toByteArray();
// 2、将字节数组转为二进制
BASE64Encoder encoder = new BASE64Encoder();
binary = encoder.encodeBuffer(bytes).trim();
} catch (WriterException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return binary;
}
/**
* image流数据处理
*
* @author yuany
* @date 2019-03-29
*/
public static BufferedImage toBufferedImage(BitMatrix matrix) {
int width = matrix.getWidth();
int height = matrix.getHeight();
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
for (int x = 0; x < width; x++) {
for (int y = 0; y < height; y++) {
image.setRGB(x, y, matrix.get(x, y) ? 0xFF000000 : 0xFFFFFFFF);
}
}
return image;
}
}
4.二维码页面
<div class="row" style="margin:0;padding:0;">
<div class="field-button" style="margin:10px;padding:10px; text-align: center;b-top: 0px;"
onclick="doPrint()">
<c:forEach items="${matrixCodeList}" var="matrixCode">
<img src="data:image/png;base64,${matrixCode.binary}"><br/>
${matrixCode.materielName} 数量:${matrixCode.amount}<br/>
${matrixCode.materielCode} 重量:${matrixCode.weight}<br/>
批次号:${matrixCode.batchNo}<br/>
生产日期:${matrixCode.productDate}<br/>
</c:forEach>
</div>
</div>
5.maven包
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>2.2</version>
</dependency>