安装
安装只需要打印机驱动和对方提供的服务器软件,不需要配置其他
描述:
此方法是用js+对方提供的服务器软件(由js中 http://127.0.0.1:888/postek/print访问,打印时软件要启动才行)实现的,不需要设置浏览器activeX权限。实现跳转到打印页,点击打印
代码
index.html
<button onclick="openwinbutton()">跳转打印</button><br/>
function openwinbutton(){
$.ajax({
type: "POST",
url: 'http://localhost:8080/printbutton',
contentType:"application/json",
data: '[{"pch":"00001","cpyt":"测试用","gg":"规格1","sl":"10","productdate":"2018-01-24"}]',
success: function(str_response) {
//实现新窗口展示打印页
var obj = window.open ("about:blank", "newwindow", "height=600, width=800, toolbar=no, menubar=no, scrollbars=no, resizable=no, location=no, status=no")
obj.document.write(str_response); //POST获取的返回写入新页面对象
obj.focus();
obj.document.close()
}
});
}
http://localhost:8080/printbutton controller返回一个HTML页面
controller
@RequestMapping(value = "/printbutton",consumes = "application/json")
public String doprintbutton(@RequestBody List<Map<String,String>> list , Model model,HttpServletResponse response) {
System.out.println(list.toString());
System.out.println(list.get(0).get("pch"));
response.setHeader("Access-Control-Allow-Origin", "*");
//map.put("hello", "欢迎进入HTML页面");
model.addAttribute("list",list);
return "printpage";
}
printpage.html 用springboot的thymeleaf
<script th:inline="javascript" type="text/javascript">
function doPrint(){
var listmap = [[${list}]];
for(i in listmap){
var map = listmap[i];
//alert("pch="+map.pch+",productdate="+map.productdate);
printNormalA(map);
}
}
function printNormalA(datamap){
//alert("pch=//"+datamap.pch+",productdate=//"+datamap.productdate);
var data = {};
data.printlabel = "一般实验标签";
data.reqParam = "1";
data.lang = "zh";
var arr = new Array();
var printparamsJsonArray = {};
printparamsJsonArray.OpenPort = "255";
printparamsJsonArray.PTK_ClearBuffer = "";
printparamsJsonArray.PTK_SetPrintSpeed = "4";
printparamsJsonArray.PTK_SetDarkness = "10";
printparamsJsonArray.PTK_SetDirection="B";
printparamsJsonArray.PTK_SetLabelWidth = "1200";
//printparamsJsonArray.PTK_SetLabelHeight = "600,16,0,false";
printparamsJsonArray.PTK_DrawRectangle ="50,40,5,1150,680";
printparamsJsonArray.PTK_DrawTextEx = "80,30,0,3,1,1,N,打印第一个,0";
arr.push(printparamsJsonArray);
arr.push({"PTK_DrawLineOr":"50,168,1100,5"});
arr.push({"PTK_DrawLineOr":"50,296,1100,5"});
arr.push({"PTK_DrawLineOr":"50,424,1100,5"});
arr.push({"PTK_DrawLineOr":"50,552,1100,5"});
arr.push({"PTK_DrawLineOr":"400,40,5,640"});
//'[{"pch":"00001","cpyt":"测试用","gg":"规格1","sl":"10","productdate":"2018-01-24"}]',
arr.push({"PTK_DrawTextEx":"70,60,0,6,3,3,N,AAA,0"})
arr.push({"PTK_DrawTextEx":"70,188,0,6,3,3,N,AAA,0"})
arr.push({"PTK_DrawTextEx":"70,316,0,6,3,3,N,AAA,0"})
arr.push({"PTK_DrawTextEx":"70,444,0,6,3,3,N,AAA,0"})
arr.push({"PTK_DrawTextEx":"70,572,0,6,3,3,N,AAA,0"})
arr.push({"PTK_DrawTextEx":"420,60,0,6,3,3,N,"+datamap.pch+",0"})
arr.push({"PTK_DrawTextEx":"420,188,0,6,3,3,N,"+datamap.cpyt+",0"})
arr.push({"PTK_DrawTextEx":"420,316,0,6,3,3,N,"+datamap.gg+",0"})
arr.push({"PTK_DrawTextEx":"420,444,0,6,3,3,N,"+datamap.sl+",0"})
arr.push({"PTK_DrawTextEx":"420,572,0,6,3,3,N,"+datamap.productdate+",0"})
arr.push({"PTK_PrintLabel":"1,1","ClosePort":""})
//data.printparams = '['+JSON.stringify( printparamsJsonArray )+','+JSON.stringify( printparamsJsonArray2 )+']';
data.printparams = JSON.stringify( arr );
console.log(data.printparams);
$.ajax({
type: "POST",
url: url,
async:false,
data:data,
dataType:"json",
timeout:5000, // in milliseconds
success:function(result){
//var retdata = JSON.parse (result);
if (result.retval == '0') {
alert("发送成功");
$("#printBtn").text("打印");
$("#printBtn").removeAttr("disabled");
numa++;
} else {
alert("发送失败,返回结果:"+result.msg);
$("#printBtn").text("打印");
$("#printBtn").removeAttr("disabled");
}
},
error:function(request, status, err) {
debugger;
alert("请求失败,请重试");
$("#printBtn").text("打印");
$("#printBtn").removeAttr("disabled");
}
});
}
</script>
以下是thymeleaf实现的两列展示打印信息预览
<div th:text="${list.size()}"/>
<!-- <tbody th:each="article1,articlepa1 : ${#numbers.sequence(0,list.size()%2 == 0 ? list.size()/2 : list.size()/2+1)}"> -->
<tbody th:each="article1,articlepa1 : ${#numbers.sequence(0,(list.size()-1)/2)}">
<table border="1" >
<tr>
<td>
<div th:each="article,articlepa : ${list}" th:if="${articlepa1.index*2} eq ${articlepa.index}">
<table border="1" th:if="${articlepa1.index*2} eq ${articlepa.index}" >
<tr>
<td>AAA</td>
<td th:text="${article.pch}" width="200px"> </td>
</tr>
<tr>
<td>BBB</td>
<td th:text="${article.cpyt}"></td>
</tr>
<tr>
<td>CCC</td>
<td th:text="${article.sl}"> </td>
</tr>
<tr>
<td>DDD</td>
<td th:text="${article.productdate}"> </td>
</tr>
</table>
</div>
</td>
<td>
<div th:each="article,articlepa : ${list}" th:if="${articlepa1.index*2+1} eq ${articlepa.index}">
<table border="1" th:if="${articlepa1.index*2+1} eq ${articlepa.index}">
<tr>
<td>批次号</td>
<td th:text="${article.pch}" width="200px"> </td>
</tr>
<tr>
<td>产品用途</td>
<td th:text="${article.cpyt}"></td>
</tr>
<tr>
<td>数量</td>
<td th:text="${article.sl}"> </td>
</tr>
<tr>
<td>生产日期</td>
<td th:text="${article.productdate}"> </td>
</tr>
</table>
</div>
</td>
</tr>
</table>
<br/>
</tbody>
<button id="printBtn">打印</button>
效果预览