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();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值