热敏打印机使用越来越广泛,而安装驱动相当复杂,万幸的是,几乎所有的热敏打印机都支持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打印机自定义无驱打印相关推荐

  1. java 打印机类printer_GitHub - 505058216/thermal_printer: Java实现网络小票打印机自定义无驱打印...

    Java实现POS打印机自定义无驱打印 热敏打印机使用越来越广泛,而安装驱动相当复杂,万幸的是,几乎所有的热敏打印机都支持ESC/P指令,参考网络上一些资料后,在此整理了一份自定义打印的方案 • 打印 ...

  2. java 小票打印_GitHub - SubLuLu/thermal_printer: Java实现网络小票打印机自定义无驱打印...

    Java实现POS打印机自定义无驱打印 热敏打印机使用越来越广泛,而安装驱动相当复杂,万幸的是,几乎所有的热敏打印机都支持ESC/P指令,参考网络上一些资料后,在此整理了一份自定义打印的方案 • 打印 ...

  3. java socket 打印机_Java使用POS打印机(无驱)

    使用原因:应项目要求,需要使用打印机,但是如果使用Windows驱动来实现打印,在某些条件下会发生网络堵塞等,而且没有提示,所以为了确保信息的完整,避免数据丢失.我们使用无驱打印(直接写端口的方法), ...

  4. [转]Java 实现 POS 打印机无驱打印

    来源:http://www.ibm.com/developerworks/cn/java/j-lo-pos/ Java 实现 POS 打印机无驱打印 文档选项 <tr valign=" ...

  5. Java 实现 POS 打印机无驱打印 【转】

    Java 对硬件的控制一直以来都不是其强项,特别是打印,Java 很难实现对 POS 打印机的直接控制,并判断打印是否成功.本文将探讨一种方法,讲述如何使用 Java 技术与网口的 POS 打印机连接 ...

  6. java usb 无驱打印_Windows Usb 无驱动打印

    \?\USB#VID_8866&PID_0100#0001B0000000#{a5dcbf10-6530-11d2-901f-00c04fb951ed} USB小票打印解决办法 一.需要驱动, ...

  7. java book打印机_java实现的打印机打印1

    //设置打印属性 构造一个新的空打印请求属性集. PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet(); pras.ad ...

  8. java kafka 分区_Java kafka如何实现自定义分区类和拦截器

    生产者发送到对应的分区有以下几种方式: (1)指定了patition,则直接使用:(可以查阅对应的java api, 有多种参数) (2)未指定patition但指定key,通过对key的value进 ...

  9. java实验Java面向对象编程_java 实验三 面向对象程序设计(无脑实验系列)

    实验7 运算符重载 (1)定义日期类,重载 "++"和"--"运算符,使之能处理两个日期类对象自增和自减运算,并且自增和自减又分为前缀和后缀运算.(可继续完善. ...

最新文章

  1. FPGA笔试题解析(三)
  2. Altium Designer修改3D视图时PCB板的颜色
  3. 成立阿里大农业兄弟连-万祥军:农民丰收节交易会乡村脱贫
  4. php正则运用,php中常用的正则表达式的介绍及应用实例代码
  5. html5 jquery mobile,html5 jquery mobile
  6. Chrome Android 60.X+ 不能自动播放audio音频的解决办法
  7. stm32超声波测距代码_干货!特斯拉Autopilot核心传感器解读超声波雷达篇
  8. 区块链浏览器_如何用区块链浏览器实现链上数据追踪?
  9. 《数据结构C语言版》——线性表详解,你一定能够看得懂学得会的宝典
  10. java推送到 钉钉用户_javaweb利用钉钉机器人向钉钉群推送消息(解决中文乱码)...
  11. 设计模式—适配器模式(思维导图)
  12. [转载] C语言C++指针与java中引用的一点对此
  13. ES6学习笔记六(新增数据结构)
  14. Openstack Nova network
  15. 个推mastersecret_个推 服务端 SDK
  16. 服务器虚拟化svc,服务器虚拟化与SVC技术在高校灾备中的应用
  17. Java并发编程:自己动手写一把可重入锁
  18. Caffe 理解blob之SyncedMen类同步CPU和GPU
  19. 渗透测试-11种绕过CDN查找真实IP的方法
  20. 基于JAVA林家餐厅自助点餐管理系统计算机毕业设计源码+数据库+lw文档+系统+部署

热门文章

  1. win10 GTX1050配置VS19+CUDA10.2+CUDNN
  2. 基于stm32的视觉和蓝牙控制F407芯片智能机械臂控制小车
  3. Linux下安装java11(亲测)
  4. WIFI6:WLAN 组播转单播原理与测试
  5. redisson watchdog 使用和原理
  6. 实战新浪微博、腾讯微博的分享功能(转)
  7. SQL注入一句话木马(load_file/out file)
  8. UCOS/UCOSII基础知识
  9. 视频播放器的html代码(二)
  10. 如何用python画数学图案_使用Matplotlib 绘制精美的数学图形例子