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>