网络打印走的socket连接,主流的java, php, c, c#等语言都支持socket,所以实现打印机的网络打印几乎是和语言无关的

打印机默认端口是9100

使用socket连接上打印机后,将打印内容按照打印机的指令进行编码后调用send就可以打印了

协议文档

小票打印机和标签打印机走的协议不同,所以各自都有一个协议,小票打印机使用的是esc协议,标签打印机使用的是tsc/tspl协议

小票打印机esc协议文档:

标签打印机tsc/tspl协议文档:

可以看到打印机支持的指令非常多,下面找到常用的指令实现我们的打印目的

小票打印机

小票打印机已经有java驱动了,参考:github.com/SubLuLu/the…

小票打印机指令使用10进制表示了,所以难以阅读,指令对应的意思请对照文档

核心代码如下

连接打印机

public NetEscPos(String ip, int port, String encoding) throws IOException{

Socket socket = new Socket(ip, port);

socketOut = socket.getOutputStream();

socket.isClosed();

NetEscPos.encoding = encoding;

writer = new OutputStreamWriter(socketOut, encoding);

}

复制代码

发送命令,比如发送切纸命令

private NetEscPos feedAndCut() throws IOException{

writer.write(0x1D);

writer.write(86);

writer.write(65);

writer.write(0);

writer.flush();

return this;

}

复制代码

对应的文档为

查看打印效果

标签打印机

SIZE 40 mm, 30 mm

SPEED 5

DENSITY 7

DIRECTION 1

REFERENCE 0,0

OFFSET 0 mm

SHIFT 0

CLS

TEXT 20,60,"TSS24.BF2",0,2,2,"堂食 0001"

TEXT 20,120,"TSS24.BF2",0,1,1,"2019-03-22 10:05:51"

TEXT 20,150,"TSS24.BF2",0,1,1,"大鸡腿(1/3)"

TEXT 20,180,"TSS24.BF2",0,1,1,"加冰 标签备注"

PRINT 1

复制代码

查看打印效果:

对应的指令可以参考文档,比如第一行设置标签纸宽度和长度的SIZE指令

一些注意的点

可以使用redis的阻塞队列实现获取是否打印成功的状态,参考:基于List的 LPUSH+BRPOP 的实现

字符集需要设置成 gb2312

// 每行进行打印

for (int i = 0; i < bufImage.getHeight() / 24 + 1; i++) {

write(escBmp);

for (int j = 0; j < bufImage.getWidth(); j++) {

for (int k = 0; k < 24; k++) {

if (((i * 24) + k) < bufImage.getHeight()) {

pixelColor = bufImage.getRGB(j, (i * 24) + k);

if (pixelColor != -1) {

data[k / 8] += (byte) (128 >> (k % 8));

}

}

}

write(data);

// 重置参数

data[0] = (byte) 0x00;

data[1] = (byte) 0x00;

data[2] = (byte) 0x00;

}

//换行

byte[] byteSend1 = new byte[2];

byteSend1[0] = 0x0d;

byteSend1[1] = 0x0a;

write(byteSend1);

}

复制代码

c#版如下

// data

for (int i = 0; i < (bmp.Height / 24) + 1; i++)

{

socket.Send(escBmp, escBmp.Length, 0);

for (int j = 0; j < bmp.Width; j++)

{

for (int k = 0; k < 24; k++)

{

if (((i * 24) + k) < bmp.Height) // if within the BMP size

{

pixelColor = bmp.GetPixel(j, (i * 24) + k);

if (pixelColor.R == 0)

{

data[k / 8] += (byte)(128 >> (k % 8));

}

}

}

socket.Send(data, 3, 0);

data[0] = (byte)'\x00';

data[1] = (byte)'\x00';

data[2] = (byte)'\x00'; // Clear to Zero.

}

byte_send = Encoding.GetEncoding("gb18030").GetBytes("\n");

//发送测试信息

socket.Send(byte_send, byte_send.Length, 0);

} // data

复制代码

如果在编写驱动过程中遇到问题,可加作者微信探讨

java socket 打印机_思普瑞特,小票打印机和标签打印机java网络驱动设计与实现...相关推荐

  1. 思普瑞特,小票打印机和标签打印机java网络驱动设计与实现

    网络打印走的socket连接,主流的java, php, c, c#等语言都支持socket,所以实现打印机的网络打印几乎是和语言无关的 打印机默认端口是9100 使用socket连接上打印机后,将打 ...

  2. PHP\Java\C#\Js\Go\Python调用小票打印机打印订单实现

    优声云打印机U7是成都优声科技有限公司推出的一款WIFI.4G联网的打印机.注意这是一款热敏58mm小票打印机,就是大家购物,外卖那样的收银小票. 在原来的小票打印机世界里,通常都是U口和蓝牙,更高级 ...

  3. 京瓷1110打印自检页_如何修改小票打印机、厨房打印机IP地址

    如何修改小票打印机.厨房打印机IP地址 在商业收银活动中,小票打印机是必不可少的设备,不管超市收银系统还是餐饮收银系统,都是常用设备.易坏设备,刚开业时购买的成套的收银设备,商家一般都给设置好小票机, ...

  4. delphi android 打印机,用delphi控制小票打印机打印图片

    用delphi控制小票打印机打印图片 unit PosPrintBmp; {************************************************************** ...

  5. 打印速度快点的打印机_佳能和爱普生打印机哪个好 高性价比打印机介绍【详解】...

    现在打印机已渐渐进入了每个家庭,家用打印机的种类繁多让人眼花缭乱.家庭若购买打印机,从前期的价格到后期的耗材全部都要考虑到位.那么佳能和爱普生打印机哪个好?家用打印机哪款性价比高?下面小编就带大家一起 ...

  6. linux java socket编程_深入学习socket网络编程,以java语言为例

    了解java的socket编程与Linux Socket API之间的关系 一.java的网络编程 1.socket原理 socket通信就是通过IP和端口号将两台主机建立连接,提供通信.主机A的应用 ...

  7. windows无法连接到打印机_惠普m1216nfh打印机驱动下载-惠普m1216nfh打印机驱动中文版下载[惠普]...

          惠普m1216nfh打印机驱动中文版是一款功能出众的打印机驱动程序,惠普m1216nfh打印机驱动中文版能够完美解决该设备不能扫描或无法识别的问题,支持有线网络打印,分辨率高,可以满足很多 ...

  8. 两个网段共享打印机_不同网段共享打印机,教您不同网段共享打印机怎么设置...

    打印机想必大家都很熟悉,打印文件是常见的事,厂家为了方便多人访问会将打印机共享,就提供了在不同的网段里连接打印机非常方便,可是很多的用户都只知道同一波段,下面,小编教大伙设置不同网段共享打印机的方法. ...

  9. java框架核心技术_你必须掌握的 21 个 Java 核心技术!(干货)

    点击上方"java进阶架构师",选择右上角"置顶公众号" 20大进阶架构专题每日送达 51闲来无事,师长一向不(没)喜(有)欢(钱)凑热闹,倒不如趁着这时候复盘 ...

最新文章

  1. 关于线程执行顺序的问题
  2. 使用vue的transition完成滑动过渡
  3. C++字节序反转的实现算法(附完整源码)
  4. python-css反爬之svg映射
  5. MYSQL在centos上主从配置
  6. jdk8 获取上一个月时间_JDK 10:FutureTask获取一个toString()
  7. 两款开源Web功能测试工具
  8. vue时间过滤器filter
  9. ununtu16.04+python3+selenium+firefox环境搭建
  10. 决策树算法与应用 学习笔记
  11. 计算机更新bios,win7bios升级教程_win7电脑主板bios升级的方法
  12. 【Flutter--实战】Dart 语言快速入门
  13. chapter02作业
  14. 【MML】华为MML AAA接口联调,Java版本
  15. 微信接龙,查人,查谁没有接龙,工具
  16. 网络监控系统的建立及部署
  17. 网线制作方法-RJ45
  18. android lcm,Android的LCM知识点(4)
  19. Unity适配IOS刘海屏
  20. js 一个等号= 二个等号== 三个等号=== 的区别

热门文章

  1. verilog的一些技巧,就靠他拿offer了!
  2. [翻译Pytorch教程]NLP部分:使用TorchText进行文本分类
  3. 进制转换之二进制与十进制转换
  4. 定时创建生成文本文件java的一个小程序
  5. C#实现格式转换:wmf转png
  6. TraceBack的用法
  7. 腾讯产品18讲10:把握产品需求的管理节奏
  8. 常用函数+星期+月份+缩写+四季
  9. Android 向联系人名单新加联系人(添加名称和电话号码两项)
  10. 【Try to Hack】Kerberos基础