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 默认为2

private int type;

// 最后退纸几行 默认为4

private int line;

// 打印机ip

private String host;

// 打印机端口 默认为9100

private 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打印主流程图

• 无耻地求赏

• 网络参考资料

text 热敏打印机_GitHub - huangzhiyi/thermal_printer: Java实现网络小票打印机自定义无驱打印...相关推荐

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

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

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

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

  3. java pos打印机_Java实现POS打印机自定义无驱打印

    热敏打印机使用越来越广泛,而安装驱动相当复杂,万幸的是,几乎所有的热敏打印机都支持ESC/P指令,参考网络上一些资料后,在此整理了一份自定义打印的方案 • 打印模板为了增强打印效果的通用性,因此需要提 ...

  4. 利用树莓派完成热敏打印机的无驱打印

    引言 "热敏打印机的工作原理是打印头上安装有半导体加热元件,打印头加热并接触热敏打印纸后就可以打印出需要的图案,其原理与热敏式传真机类似.图象是通过加热,在膜中产生化学反应而生成的.这种热敏 ...

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

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

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

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

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

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

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

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

  9. php 连接小票机,网络无线小票打印机如何连接和使用

    网络小票打印机和传统打印机的区别就在于,小票打印机可以不通过电脑驱动来控制打印机,而是仅仅需要一个网络小票打印机管理软件来在服务器上安装和管理网络打印机,随着移动互联网+技术的飞速发展,目前网络打印机 ...

  10. JAVA的网络编程【转】

    转自 http://www.cnblogs.com/springcsc/archive/2009/12/03/1616413.html 网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能 ...

最新文章

  1. nginx 配置https 并解决重定向后https协议变成了http的问题
  2. 算法-有向环和拓扑排序
  3. sklearn自学指南(part17)--稳健回归-异常值和建模误差
  4. 第三十三期:连接池中非常关键的两个参数,到底是干啥用的?
  5. 基于图像分割的立体匹配方法
  6. Openwrt之移动硬盘ext3/ext4格式化工具
  7. Win-MASM64汇编语言-MOV/MOVSB/MOVSW/MOVSD/REP/REPZ/REPE/REPNZ/REPNE
  8. 比想象中更旗舰,金立M2017国内首秀堪称完美!
  9. 第七次全国人口普查,数据来了!
  10. Android 友盟分享简单Demo
  11. 生产制造MES系统源码 采购管理模块解析
  12. 产品思维30讲(梁宁)-- 整体
  13. WIFI-WPA破解
  14. AI电话机器人有没有效果?具体的功能都有哪些?
  15. numpy多维数组获取指定矩形区域
  16. 腾讯文档自动填写工具(工具)
  17. 软件的成本与定价如何决策?PMP软件开发规模估算和成本估算方法详解
  18. 使用kd树数据结构,实现k-means聚类加速
  19. 看雪3万课程笔记-Frida 辅助分析ollvm字符串加密(二)
  20. 系统集成项目管理工程师复习方法:思维导图辅助记忆

热门文章

  1. excel数据分析 - 10个清洗文本类函数
  2. 遭遇应用程序正常初始化失败
  3. Python人眼视线追踪系统
  4. 景深与光圈、拍摄距离和镜头焦距的关系
  5. 红黑树(四)之 C++的实现 http://www.cnblogs.com/skywang12345/p/3624291.html?utm_source=tuicoolutm_medium=refe
  6. 快速排序(java实现)
  7. 电子产品做3C认证检测标准是什么
  8. 中国PET瓶坯注塑系统行业应用态势与投资前景预测报告(2022-2028年)
  9. 深度强化学习在滴滴路径规划中的探索实践
  10. python实现循环赛日程表问题的算法_循环赛日程表问题