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>