显示二维码及其数据

1.jsp页面 

   <button class=" btn btn-info" onclick="getIds();" >
	    <i class="icon-qrcode" aria-hidden="true" >&nbsp;打印二维码</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}&nbsp;&nbsp;&nbsp;数量:${matrixCode.amount}<br/>
                ${matrixCode.materielCode}&nbsp;&nbsp;&nbsp;重量:${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>
 

猜你喜欢

转载自blog.csdn.net/IT_LuoSha/article/details/89929765