美文网首页
Android 热敏打印 文本

Android 热敏打印 文本

作者: 吃货养成记 | 来源:发表于2017-09-18 10:11 被阅读96次

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

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

    }

    }

    相关文章

      网友评论

          本文标题:Android 热敏打印 文本

          本文链接:https://www.haomeiwen.com/subject/qamvsxtx.html