技术控

    今日:56| 主题:49157
收藏本版 (1)
最新软件应用技术尽在掌握

[其他] 每日一博 | JFinal小插件:Java驱动打印小票

[复制链接]
九级车震 发表于 2016-10-2 06:34:11
115 3

立即注册CoLaBug.com会员,免费获得投稿人的专业资料,享用更多功能,玩转个人品牌!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
驱动打印小票--80热敏打印机

   项目环境基于JFinal2.2 偷了个懒直接在JFinal demo上做的_

   在大神 SubLuLu/thermal_printer 开源的项目基础上写了这个demo,SubLuLu用的是指令打印,而且环境是基于Android的,所以我用Java做的项目无法很方便的打印图片和兼容更多的热敏打印机,因此借鉴大神的构思我采用驱动方式进行打印。
   * 我的项目地址:DriverPOSPrint *
  打印流程

   
每日一博 | JFinal小插件:Java驱动打印小票-1 (Android,热敏打印机,false,title,Java)

  如图中所示,在项目实际使用中采用异步的方式进行打印。调用者只需要创建新的PrintJob 添加到任务队列中,挂起的线程就会被自动唤起完成打印任务
  打印模板

  模板采用Json格式存储,分为header、goods、warn、msg四个部分,对模板的解析采用阿里出品的fastjson,模板共5中,模板名称分别对应PrintJob中missionType
  模板示例-(simple.json)

  [code]
{
"header": [{
"text": "{$title}",
"size": 14,
"bold": true,
"align": 1,
"line": true,
"type": 0
},
{
"text": "品    牌:{$brandName}",
"size": 9,
"bold": false,
"align": 0,
"line": false,
"type": 0
},
{
"text": "({$shopName})",
"size": 9,
"bold": false,
"align": 0,
"line": true,
"type": 0
},
{
"text": "桌    号:{$tableNumb}",
"size": 9,
"bold": false,
"align": 0,
"line": false,
"type": 0
},
{
"text": "({$tableName})",
"size": 9,
"bold": false,
"align": 0,
"line": true,
"type": 0
},
{
"text": "--------------------------------",
"size": 9,
"bold": false,
"align": 0,
"line": true,
"type": 0
}],
"goods": [{
"name": "编码",
"width": 8,
"variable": "code"
},
{
"name": "名称",
"width": 12,
"variable": "name"
},
{
"name": "数量",
"width": 6,
"variable": "quantity"
},
{
"name": "  金额",
"width": 8,
"variable": "price"
}],
"warn": [{
"text": "-------------{$warnTitle}--------------",
"size": 9,
"bold": false,
"align": 0,
"line": true,
"type": 0
},
{
"text": "  ",
"size": 9,
"bold": false,
"align": 0,
"line": true,
"type": 0
},
{
"text": "{$warnMsg}",
"size": 11,
"bold": true,
"align": 0,
"line": true,
"type": 0
}],
"msg": [{
"text": "----------{$posTitle}-----------",
"size": 9,
"bold": false,
"align": 0,
"line": true,
"type": 0
},
{
"text": "{$posMsg}",
"size": 9,
"bold": false,
"align": 0,
"line": true,
"type": 0
}]
}[/code]  打印规则

每日一博 | JFinal小插件:Java驱动打印小票-2 (Android,热敏打印机,false,title,Java)

  打印参数

  
       
  • 打印根据模板和打印参数合成按照顺序进行打印   
  • 打印参数替换模板中的占位符   
  • 打印参数解析商品信息进行输出  
  参数示例

  [code] json
{
"keys": {
"dateTime": "2016-09-10 12:21:00",
"posTitle": "收银软件下单结果",
"brandName": "智慧餐厅",
"orderId": "1609101220001",
"shopName": "天山店",
"title": "网络订单",
"tableName": "外卖1",
"barCode": "7255",
"allPrice": "66.88",
"tableNumb": "0002",
"warnTitle": "异常提示",
"posMsg": "点菜成功!1001 无此菜 本次点菜3/3份。其中2成功,1失败。合计XXXX元祝您用餐愉快!欢迎下次光临",
"warnMsg": "部分菜品未下成功请联系服务员人工处理"
},
"goods": [{
"code": "01001",
"quantity": "1.0",
"price": "18.0",
"name": "牛肉"
},
{
"code": "01002",
"quantity": "1.0",
"price": "10.0",
"name": "酸辣土豆"
},
{
"code": "01003",
"quantity": "1.0",
"price": "6.0",
"name": "拍黄瓜"
}]
}[/code]  
       
  • keys中的值负责替换模板中的占位符,如果模板中有,keys中没有则将占位符原样输出   
  • goods中的参数对用模板中的goods的每个属性  
  封装的PrintJob

  ```
  [code]/**
* 任务类型:0=普通订单 1=预定单 2=支付订单 3=警告单 4=test单
*/
private int missionType;

/**
* 需要打印的参数--可扩展
*/
private Map param;

/**
* 打印机逻辑名称
*/
private String printerName;[/code]  ``` 根据不同的missionType自动选用对应的模板,替换参数后打印
  效果图(多模板)
1234下一页
友荐云推荐




上一篇:JStorm-Alibaba —— Storm 的实时流式计算框架
下一篇:Vx32: portable, efficient, safe execution of untrusted x86 code
酷辣虫提示酷辣虫禁止发表任何与中华人民共和国法律有抵触的内容!所有内容由用户发布,并不代表酷辣虫的观点,酷辣虫无法对用户发布内容真实性提供任何的保证,请自行验证并承担风险与后果。如您有版权、违规等问题,请通过"联系我们"或"违规举报"告知我们处理。

刘笛 发表于 2016-10-8 07:52:00
我来查水表的
回复 支持 反对

使用道具 举报

cola_cy 发表于 2016-10-9 09:44:42
最伤人的话,总出自最温柔的嘴。
回复 支持 反对

使用道具 举报

董堰平 发表于 2016-10-20 02:57:45
介是神马?!!
回复 支持 反对

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

我要投稿

推荐阅读

扫码访问 @iTTTTT瑞翔 的微博
回页顶回复上一篇下一篇回列表手机版
手机版/CoLaBug.com ( 粤ICP备05003221号 | 文网文[2010]257号 )|网站地图 酷辣虫

© 2001-2016 Comsenz Inc. Design: Dean. DiscuzFans.

返回顶部 返回列表