java pos打印机_Java实现POS打印机自定义无驱打印
热敏打印机使用越来越广泛,而安装驱动相当复杂,万幸的是,几乎所有的热敏打印机都支持ESC/P指令,参考网络上一些资料后,在此整理了一份自定义打印的方案
• 打印模板为了增强打印效果的通用性,因此需要提供多元化的模板对齐支持,而且不同大小的打印机所需的版式也不尽相同模板采用Json格式存储,分为header、goods、bill、footer四个部分,对模板的解析采用号称史上最快的阿里出品的fastjson
模板示例{ "header": [
{ "text": "{$shopname}", "size": 2, "bold": true, "format": 1, "line": 2, "underline": true, "type": 0
},
{ "text": "{$barCode}", "format": 1, "line": 2, "type": 1
},
{ "path": "{$logo}", "format": 1, "line": 2, "type": 3
},
{ "text": "{$qrCode}", "format": 1, "line": 2, "type": 2
}
], "goods": [
{ "name": "商品名", "width": 24, "format": 0, "variable": "name"
},
{ "name": "数量", "width": 8, "format": 1, "variable": "num"
},
{ "name": "单价", "width": 8, "format": 1, "variable": "price"
},
{ "name": "金额", "width": 8, "format": 2, "variable": "pay"
}
], "bill": [
{ "text": "实收现金", "size": 3, "bold": true, "format": 1, "line": 2, "underline": false, "type": 0
},
{ "text": "{$cash}", "size": 3, "bold": true, "format": 1, "line": 2, "underline": false, "type": 0
}
], "footer": [
{ "text": "详情请访问官网", "size": 2, "bold": true, "format": 1, "line": 2, "underline": true, "type": 0
},
{ "text": "http://www.sublulu.com", "format": 1, "line": 2, "type": 2
}
]
}
模板的代码结构如上所示,可见每个部分均是Json数组header、bill、footer三部分的结构一模一样,只是位置和内容有所差异goods区域的数组里面每个元素都对应四个相同的属性类似{$logo}是模板中指定的占位符,能够更好的支持个性化
模板参数规则
goods参数详解/** * 列名 */ private String name; /** * 排版格式 */ private int format; /** * 列宽 * 58mm 每行32个半角字符 * 80mm 每行48个半角字符 */ private int width; /** * 占位符 * e.g {$time} */ private String variable;
• 打印参数打印根据模板和打印参数合成按照顺序进行打印
打印参数替换模板中的占位符
打印参数解析商品信息进行输出
参数示例{ "keys": { "shopname": "黄太吉", "barCode": "6921734976505", "qrCode": "http://www.sublulu.com", "time": "15:35", "num": 14, "cash": 324.5, "logo": "/sdcard/qr.png", "adv": "关注微信,有大大地活动哦"
}, "goods": [
{ "name": "鱼香肉丝", "num": 1, "price": 12.8, "pay": 12.8
},
{ "name": "葱油粑粑", "num": 1, "price": 4.8, "pay": 4.8
},
{ "name": "辣椒炒肉", "num": 1, "price": 14.8, "pay": 14.8
}
]
}
打印参数的代码结构如上所示,主要分为keys和goods两个部分:keys中的值负责替换模板中的占位符,如果模板中有,keys中没有则将占位符原样输出
goods中的参数对用模板中的goods的每个属性
打印效果
• 使用示例打印工具采用单例模式
考虑可能要操作多个打印机,所以以每个ip为key,单例本身为value值
获取EscPos实例/** * ip为打印机IP,需要配置 * 端口默认为9100,请勿随意修改 * 编码默认为“GBK”,传入打印机支持的编码 */EscPos.getInstance(String ip);EscPos.getInstance(String ip, int port);EscPos.getInstance(String ip, int port, String encoding);EscConfig escConfig = new EscConfig(String ip);EscConfig escConfig = new EscConfig(String ip, int ip);EscConfig escConfig = new EscConfig(String ip, int ip, String encoding);EscPos.getInstance(escConfig);
以上为几种获取EscPos实例的代码,EscConfig是对打印机的全局配置项,其详情如下:// 1 58mm 2. 80mm 默认为2private int type;
// 最后退纸几行 默认为4private int line;
// 打印机ipprivate String host;
// 打印机端口 默认为9100private int port;
// 打印机的编码格式 默认为"GBK"private String encoding;
打印示例
所有常用打印命令已经封装完毕,执行打印操作的代码十分简单,如下所示:// 获取EscPos实例
EscPos.getInstance("192.168.1.110");
// 根据模板内容和打印参数执行打印命令
EscPos.print(template, param);
• 打印流程
EscPos工具类对外质保路了两种方法,且均为静态方法:getInstance()及其重载,用于获取对象实例
print(String template, String param),用于打印小票
使用起来相当方便,但其流程略显复杂
打印主流程图
goods打印流程图
header、bill、footer打印主流程图
参考资料:https://github.com/SubLuLu/thermal_printer
java pos打印机_Java实现POS打印机自定义无驱打印相关推荐
- java 打印机类printer_GitHub - 505058216/thermal_printer: Java实现网络小票打印机自定义无驱打印...
Java实现POS打印机自定义无驱打印 热敏打印机使用越来越广泛,而安装驱动相当复杂,万幸的是,几乎所有的热敏打印机都支持ESC/P指令,参考网络上一些资料后,在此整理了一份自定义打印的方案 • 打印 ...
- java 小票打印_GitHub - SubLuLu/thermal_printer: Java实现网络小票打印机自定义无驱打印...
Java实现POS打印机自定义无驱打印 热敏打印机使用越来越广泛,而安装驱动相当复杂,万幸的是,几乎所有的热敏打印机都支持ESC/P指令,参考网络上一些资料后,在此整理了一份自定义打印的方案 • 打印 ...
- java socket 打印机_Java使用POS打印机(无驱)
使用原因:应项目要求,需要使用打印机,但是如果使用Windows驱动来实现打印,在某些条件下会发生网络堵塞等,而且没有提示,所以为了确保信息的完整,避免数据丢失.我们使用无驱打印(直接写端口的方法), ...
- [转]Java 实现 POS 打印机无驱打印
来源:http://www.ibm.com/developerworks/cn/java/j-lo-pos/ Java 实现 POS 打印机无驱打印 文档选项 <tr valign=" ...
- Java 实现 POS 打印机无驱打印 【转】
Java 对硬件的控制一直以来都不是其强项,特别是打印,Java 很难实现对 POS 打印机的直接控制,并判断打印是否成功.本文将探讨一种方法,讲述如何使用 Java 技术与网口的 POS 打印机连接 ...
- java usb 无驱打印_Windows Usb 无驱动打印
\?\USB#VID_8866&PID_0100#0001B0000000#{a5dcbf10-6530-11d2-901f-00c04fb951ed} USB小票打印解决办法 一.需要驱动, ...
- java book打印机_java实现的打印机打印1
//设置打印属性 构造一个新的空打印请求属性集. PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet(); pras.ad ...
- java kafka 分区_Java kafka如何实现自定义分区类和拦截器
生产者发送到对应的分区有以下几种方式: (1)指定了patition,则直接使用:(可以查阅对应的java api, 有多种参数) (2)未指定patition但指定key,通过对key的value进 ...
- java实验Java面向对象编程_java 实验三 面向对象程序设计(无脑实验系列)
实验7 运算符重载 (1)定义日期类,重载 "++"和"--"运算符,使之能处理两个日期类对象自增和自减运算,并且自增和自减又分为前缀和后缀运算.(可继续完善. ...
最新文章
- FPGA笔试题解析(三)
- Altium Designer修改3D视图时PCB板的颜色
- 成立阿里大农业兄弟连-万祥军:农民丰收节交易会乡村脱贫
- php正则运用,php中常用的正则表达式的介绍及应用实例代码
- html5 jquery mobile,html5 jquery mobile
- Chrome Android 60.X+ 不能自动播放audio音频的解决办法
- stm32超声波测距代码_干货!特斯拉Autopilot核心传感器解读超声波雷达篇
- 区块链浏览器_如何用区块链浏览器实现链上数据追踪?
- 《数据结构C语言版》——线性表详解,你一定能够看得懂学得会的宝典
- java推送到 钉钉用户_javaweb利用钉钉机器人向钉钉群推送消息(解决中文乱码)...
- 设计模式—适配器模式(思维导图)
- [转载] C语言C++指针与java中引用的一点对此
- ES6学习笔记六(新增数据结构)
- Openstack Nova network
- 个推mastersecret_个推 服务端 SDK
- 服务器虚拟化svc,服务器虚拟化与SVC技术在高校灾备中的应用
- Java并发编程:自己动手写一把可重入锁
- Caffe 理解blob之SyncedMen类同步CPU和GPU
- 渗透测试-11种绕过CDN查找真实IP的方法
- 基于JAVA林家餐厅自助点餐管理系统计算机毕业设计源码+数据库+lw文档+系统+部署
热门文章
- win10 GTX1050配置VS19+CUDA10.2+CUDNN
- 基于stm32的视觉和蓝牙控制F407芯片智能机械臂控制小车
- Linux下安装java11(亲测)
- WIFI6:WLAN 组播转单播原理与测试
- redisson watchdog 使用和原理
- 实战新浪微博、腾讯微博的分享功能(转)
- SQL注入一句话木马(load_file/out file)
- UCOS/UCOSII基础知识
- 视频播放器的html代码(二)
- 如何用python画数学图案_使用Matplotlib 绘制精美的数学图形例子