显示条形码与列表数据

1.jsp页面

   <button class=" btn btn-primary btn-editQx" onclick="printInventoryTask();">
      打印<i class="icon-print" aria-hidden="true" style="margin-left:5px;"></i>
   </button>


   //触发事件
   function printInventoryTask(){
        var checkedNum = getGridCheckedNum("#grid-table", "id");
        var id="";
        if (checkedNum == 0) {
            layer.alert("请选择一个要打印的盘点单据!");
            return false;
        }else if (checkedNum >1){
            layer.alert("只能选择一个要打印的盘点单据!");
            return false;
        }else{
            id = jQuery("#grid-table").jqGrid('getGridParam', 'selarrrow');
            var url = context_path + "/inventoryTask/printInventoryTask?id="+id;
            window.open(url);
        }
    }

2.controller层 

     /**
     * 打印盘点单据
     */
    @RequestMapping(value = "/printInventoryTask")
    @ResponseBody
    public ModelAndView printStockCheck(Long id) {
        ModelAndView mv = new ModelAndView();

        //获取盘点任务单号
        InventoryTask task = inventoryTaskService.selectById(id);
        String task_code = task.getInventoryTaskCode();

        //获取盘点任务单详情
        List<InventoryTaskDetail> taskDetailList = 
                  inventoryTaskDetailService.taskDeatilList(id);
        mv.addObject("task_code", task_code);
        mv.addObject("taskDetailList", taskDetailList);
        mv.setViewName("techbloom/stock/inventory/inventoryTask_print");
        return mv;
    }
    

 3.service层

     /**
     * 根据ID获取进行中盘点任务单详细
     */
    List<InventoryTaskDetail> taskDeatilList(Long id);
    

4.serviceImp层 

     /**
     * 获取进行中任务单详细
     */
    @Override
    public List<InventoryTaskDetail> taskDeatilList(Long id) {
        Map<String, Object> map = new HashMap<>();
        map.put("inventory_task_id", id);
        return inventoryTaskDetailDao.selectByMap(map);
    }
    

 5.打印页面

 div  class="container-fluid">
    <div id="t1" class=" row docs_example " style="margin-top: 10px;">
        <span class="">
             任务单号:${task_code}
        </span>
    </div>
    <div id="t3" class=" row row_nomargin" style="margin-bottom: 10px;">
        <span style="float: right; display: grid;text-align: right; text-align: -webkit- 
        right;margin-top: 3px;" >
            <img src="<%=basePath%>inventoryTask/generateBarcode?msg=${task_code}" 
            style="width: 150px;"/>
        </span>
    </div>
    <table id="t4" class="table table-bordered">
        <thead>
        <tr>
             <th>序号</th><th>物料编码</th><th>物料名称</th><th>批次号</th><th>库位</th> 
             <th>盘点数量</th><th>库存数量</th>
        </tr>
        </thead>
        <tbody>
        <c:forEach items="${taskDetailList}" var="detail" varStatus="vs">
            <tr>
                <td style="height:39.2px">${vs.index + 1}</td>
                <td style="height:39.2px" align = "left">${detail.materialCode}</td>
                <td style="height:39.2px" align = "left">${detail.materialName}</td>
                <td style="height:39.2px" align = "left">${detail.batchNo}</td>
                <td style="height:39.2px" align = "left">${detail.positionCode}</td>
                <td style="height:39.2px" align = "left">${detail.inventoryAmount}</td>
                <td style="height:39.2px" align = "left">${detail.stockAmount}</td>
            </tr>
        </c:forEach>
        </tbody>
    </table>
</div>
    

 6.controller 条形码方法

     /**
     * @Description: 生成条形码
     
     */
    @RequestMapping(value = "/generateBarcode")
    @ResponseBody
    public void generateBarcode(HttpServletResponse resp, String msg){
        byte[] b = BarcodeUtil.generate(msg);
        try {
            resp.getOutputStream().write(b);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

7.条形码工具类 

package com.tbl.common.utils;

import org.krysalis.barcode4j.impl.code39.Code39Bean;
import org.krysalis.barcode4j.output.bitmap.BitmapCanvasProvider;
import org.krysalis.barcode4j.tools.UnitConv;

import java.awt.image.BufferedImage;
import java.io.*;

/**
 * 条形码生成工具类
 *
 */
public class BarcodeUtil {

    /**
     * 生成文件
     *
     * @param msg
     * @param path
     * @return
     */
    public static File generateFile(String msg, String path) {
        File file = new File(path);
        try {
            generate(msg, new FileOutputStream(file));
        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        }
        return file;
    }

    /**
     * 生成字节
     *
     * @param msg
     * @return
     */
    public static byte[] generate(String msg) {
        ByteArrayOutputStream ous = new ByteArrayOutputStream();
        generate(msg, ous);
        return ous.toByteArray();
    }

    /**
     * 生成到流
     *
     * @param msg
     * @param ous
     */
    public static void generate(String msg, OutputStream ous) {
        if (StringUtils.isEmpty(msg) || ous == null) {
            return;
        }

        Code39Bean bean = new Code39Bean();

        // 精细度
        final int dpi = 150;
        // module宽度
        final double moduleWidth = UnitConv.in2mm(1.0f / dpi);

        // 配置对象
        bean.setModuleWidth(moduleWidth);
        bean.setWideFactor(3);
        bean.doQuietZone(false);

        String format = "image/png";
        try {

            // 输出到流
            BitmapCanvasProvider canvas = new BitmapCanvasProvider(ous, format, dpi,
                    BufferedImage.TYPE_BYTE_BINARY, false, 0);

            // 生成条形码
            bean.generateBarcode(canvas, msg);

            // 结束绘制
            canvas.finish();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    public static void main(String[] args) {
        String msg = "123456789";
        String path = "barcode.png";
        generateFile(msg, path);
    }
}
    

 8.Maven包

<dependency>
   <groupId>net.sf.barcode4j</groupId>
   <artifactId>barcode4j-light</artifactId>
   <version>2.0</version>
</dependency>

猜你喜欢

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