Android 热敏打印 文本

为了验证项目中的代码没有问题,我将客户的打印流保存到本地文件上进行测试。

权限 <uses-permission android:name="android.permission.INTERNET"/>

public class MainActivity2 extends AppCompatActivity {

TextView tv_print;

InputStream inputStream;

ClearEditText et_ip;

Pos pos;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main2);

tv_print=(TextView)findViewById(R.id.tv_print);

et_ip= (ClearEditText) findViewById(R.id.et_ip);

pos= Pos.newInstance();

tv_print.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

inputStream= getResources().openRawResource(R.raw.read);

//需要在res/raw 写一个read.txt 文件

new Thread(new Runnable() {

@Override

public voidrun() {

//测试 打印

boolean open =pos.Open(et_ip.getText().toString(),9100);

Message message =newMessage();

message.obj= open;

message.what=0;

handler.sendMessage(message);

}

}).start();

}

});

}

boolean open;

Handler handler=new Handler(new Handler.Callback() {

@Override

public boolean handleMessage(Message msg) {

switch(msg.what) {

case0:

open= (boolean) msg.obj;

if(open) {

//打印次数 调用

print();

}else

Toast.makeText(MainActivity2.this,"连接失败请查看打印设置ip是否正确", Toast.LENGTH_SHORT).show();

break;

}

return true;

}

});

private void print() {

if(pos==null)pos= Pos.newInstance();

pos.print2(inputStream);

}

}




public class Pos {

//定义编码方式

private staticStringencoding=null;

privateSocketsocket=null;

// 通过socket流进行读写

privateOutputStreamsocketOut=null;

privateOutputStreamWriterwriter=null;

public intNet_ReceiveTimeout=1500;

booleanIFOpen=false;

privatePos() {

super();

}

public staticPos newInstance() {

Pos fragment =new Pos();

return fragment;

}

public boolean Open(String ipaddress,intnetport) {

if(socket==null||socket.isClosed()) {

try{

SocketAddress ipe =newInetSocketAddress(ipaddress, netport);

socket=newSocket();//Socket(ipaddress, netport,true);

socket.connect(ipe);

socket.setSoTimeout(Net_ReceiveTimeout);

//socket.SendTimeout = Net_SendTimeout;

IFOpen=true;

}catch(Exception e) {

e.printStackTrace();

IFOpen=false;

}

}else{

try{

if(!socket.isClosed())socket.close();

SocketAddress ipe =newInetSocketAddress(ipaddress, netport);

socket=newSocket();//Socket(ipaddress, netport,true);

socket.connect(ipe);

socket.setSoTimeout(Net_ReceiveTimeout);

IFOpen=true;

}catch(Exception e) {

e.printStackTrace();

IFOpen=false;

}

}

returnIFOpen;

}

public Pos(String ip,intport, String encoding)throwsIOException {

try{

SocketAddress ipe =new InetSocketAddress(ip, port);

socket=newSocket();//Socket(ipaddress, netport,true);

socket.connect(ipe);

socket.setSoTimeout(Net_ReceiveTimeout);

}catch(Exception e) {

e.printStackTrace();

if(e.getMessage() !=null&& e.getMessage().equals("EHOSTUNREACH")) {

//ip连接不上,连接失败请查看打印设置ip是否正确 No route to host

//Toast.makeText(MyApplication.getInstance().getApplicationContext(), "连接失败请查看打印设置ip是否正确", Toast.LENGTH_SHORT).show();

}else if(e.getMessage() !=null&& e.getMessage().equals("ETIMEDOUT")) {

//链接超时

try{

socket.close();

SocketAddress ipe =newInetSocketAddress(ip, port);

socket=newSocket();//Socket(ipaddress, netport,true);

socket.connect(ipe);

socket.setSoTimeout(Net_ReceiveTimeout);

}catch(Exception e2) {

e.printStackTrace();

}

}

}

}

public void initdate(String encoding) {

try{

socketOut=newDataOutputStream(socket.getOutputStream());

// this.encoding = encoding;

writer=newOutputStreamWriter(socketOut,"GB2312");

//initPos();

}catch(Exception e) {

e.printStackTrace();

}

}

/**

* 关闭IO流和Socket

*

*@throwsIOException

*/

public void close IOAndSocket()throwsIOException {

writer.close();

socketOut.close();

socket.close();

}


/**

* 初始化打印机

*

*@throwsIOException

*/

public void initPos()throws IOException {

writer.write(0x1B);

writer.write(0x40);

writer.flush();

}

/**

* 加粗

*

*@paramflagfalse为不加粗

*@return

*@throwsIOException

*/

public voidbold(booleanflag)throwsIOException {

if(flag) {

//常规粗细

writer.write(0x1B);

writer.write(69);

writer.write(0xF);

writer.flush();

}else{

//加粗

writer.write(0x1B);

writer.write(69);

writer.write(0);

writer.flush();

}

}

/**

* 复位打印机

*/

public static final byte[]RESET= {0x1b,0x40};

public static final byte[]RESET2= {0x1B,0x43,0x21};

public static final byte[]RESET3= {0x1B,0x4E,0x07};

/**

* 左对齐

*/

public static final byte[]ALIGN_LEFT= {0x1b,0x61,0x00};

/**

* 中间对齐

*/

public static final byte[]ALIGN_CENTER= {0x1b,0x61,0x01};

/**

* 右对齐

*/

public static final byte[]ALIGN_RIGHT= {0x1b,0x61,0x02};

/**

* 选择加粗模式

*/

public static final byte[]BOLD= {0x1b,0x45,0x01};

/**

* 取消加粗模式

*/

public static final byte[]BOLD_CANCEL= {0x1b,0x45,0x00};

/**

* 宽高加倍

*/

public static final byte[]DOUBLE_HEIGHT_WIDTH= {0x1d,0x21,0x11};

/**

* 宽加倍

*/

public static final byte[]DOUBLE_WIDTH= {0x1d,0x21,0x10};

/**

* 高加倍

*/

public static final byte[]DOUBLE_HEIGHT= {0x1d,0x21,0x01};

/**

* 字体不放大

*/

public static final byte[]NORMAL= {0x1d,0x21,0x00};

/**

* 设置默认行间距

*/

public static final byte[]LINE_SPACING_DEFAULT= {0x1b,0x32};

/**

* 打印纸一行最大的字节

*/

private static final intLINE_BYTE_SIZE=48;

private static final intLINE_BYTE_SIZE2=110;

/**

* 打印三列时, 中间一列的中心线距离打印纸左侧的距离

*/

private static final intLEFT_LENGTH=16;

public static final intLEFT_RIGHT=12;

public static final intLEFT_RIGHT_ZHEN=27;

private static final intLEFT_RIGHT2=8;

/**

* 打印三列时, 第一列汉字最多显示几个文字

*/

private static final intLEFT_TEXT_MAX_LENGTH=15;

/**

* 获取数据长度

*

*@parammsg

*@return

*/

@SuppressLint("NewApi")

private static intgetBytesLength(String msg) {

returnmsg.getBytes(Charset.forName("GB2312")).length;

}

/**

* 设置打印格式

*

*@paramcommand格式指令

*/

public voidselectCommand(byte[] command) {

try{

socketOut.write(command);

socketOut.flush();

}catch(IOException e) {

e.printStackTrace();

}

}

///

/// 换行(回车)

///

///

publicString CMD_Enter() {

return newStringBuffer().append((char)10).toString();

}

//测试连接打印机

public voidprint(inti,finalMainActivity activity)throwsIOException {

initdate("GB2312");

selectCommand(RESET);

if(i ==1) {//小票打印机

selectCommand(ALIGN_CENTER);

selectCommand(DOUBLE_HEIGHT_WIDTH);

printText("恋商进销存"+ CMD_Enter());

printLine(1);

getCutPagerByte();

closeIOAndSocket();

}else if(i ==2) {//针式打印机

selectCommand(RESET2);

selectCommand(RESET3);

selectCommand(ALIGN_CENTER);

selectCommand(DOUBLE_HEIGHT_WIDTH);

printText("恋商进销存"+ CMD_Enter());

printLine(1);

getCutPaperByte(CUT_PAGE2);

printLocation(1);

printTabSpace(2);

printWordSpace(1);

closeIOAndSocket();

}

}

public static byte[] toByteArray(InputStream input)throwsIOException {

ByteArrayOutputStream output =newByteArrayOutputStream();

byte[] buffer =new byte[4096];

intn =0;

while(-1!= (n = input.read(buffer))) {

output.write(buffer,0, n);

}

returnoutput.toByteArray();

}


public void print2(finalInputStream inputStream) {

newThread(newRunnable() {

@Override

public voidrun() {

try{

initdate("GB2312");

if(inputStream!=null) {

byte[] aa =toByteArray(inputStream);

// printText("Android" + CMD_Enter());

socketOut.write(aa,0, aa.length);

socketOut.flush();

// getCutPagerByte();

closeIOAndSocket();

}

}catch(Exception e){

e.printStackTrace();

}

}

}).start();

}

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 201,924评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,781评论 2 378
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,813评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,264评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,273评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,383评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,800评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,482评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,673评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,497评论 2 318
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,545评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,240评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,802评论 3 304
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,866评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,101评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,673评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,245评论 2 341

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,573评论 18 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,547评论 18 399
  • 一、 1、请用Java写一个冒泡排序方法 【参考答案】 public static void Bubble(int...
    独云阅读 1,336评论 0 6
  • 小编费力收集:给你想要的面试集合 1.C++或Java中的异常处理机制的简单原理和应用。 当JAVA程序违反了JA...
    八爷君阅读 4,564评论 1 114
  • 想起偶然看到的一个好友的签名:年轻的时候我们尽情洒脱,将来才有更多更美的回忆。 是的,趁年轻,能蹦跶蹦跶也是极好的...
    七月七的花阅读 506评论 0 1