Android连接网络打印机,jSocket连接网络打印机

老大写的一个打印工具类,记录一下。

package com.Ieasy.Tool;

import android.annotation.SuppressLint;
import java.io.IOException ;
import java.io.OutputStream ;
import java.io.PrintWriter ;
import java.net.InetSocketAddress ;
import java.net.Socket ;
import java.net.SocketAddress ;
import java.nio.charset.Charset ;

@SuppressLint("NewApi")
public class NetPrinter
{
    public Socket socket;

    public int POS_OPEN_NETPORT = 9100;// 0X238c
    public boolean IFOpen = false;
    public int Net_SendTimeout = 1000;
    public int Net_ReceiveTimeout = 1500;
    public String command = ""; //打印命令字符串
    public byte[] outbytes; //传输的命令集

    PrinterCMD pcmd = new PrinterCMD();

    /// <summary>
    /// 网络打印机 打开网络打印机
    /// </summary>
    /// <param name="ipaddress"></param>
    /// <returns></returns>
    public boolean Open(String ipaddress, int netport)
    {
        if (socket == null)
        {
            try
            {
                SocketAddress ipe = new InetSocketAddress(ipaddress,netport);
                socket = new Socket();  //Socket(ipaddress, netport,true);
                socket.connect(ipe);
                socket.setSoTimeout(Net_ReceiveTimeout);
                //socket.SendTimeout = Net_SendTimeout;
                IFOpen = true;
                //System.out.print("连接成功");
            }
            catch(Exception e)
            {
                //MessageBox.Show("连接不成功");
                e.printStackTrace();
                IFOpen = false;
            }
        }
        else
        {
            try
            {
                socket.close();
                SocketAddress ipe = new InetSocketAddress(ipaddress,netport);
                socket = new Socket();  //Socket(ipaddress, netport,true);
                socket.connect(ipe);
                socket.setSoTimeout(Net_ReceiveTimeout);
                //socket.SendTimeout = Net_SendTimeout;
                IFOpen = true;
            }
            catch(Exception e)
            {
                e.printStackTrace();
                IFOpen = false;
            }
        }
        return IFOpen;
    }

    /// <summary>
    /// 网络打印机 关闭
    /// </summary>
    /// <param name="ipaddress"></param>
    /// <returns></returns>
    public void Close()
    {
        try
        {
            socket.close();
            socket = null;
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }

    /// <summary>
    /// 网络打印机 初始化打印机
    /// </summary>
    public void Set()
    {
        try
        {
            command = pcmd.CMD_SetPos();
            OutputStream stream = socket.getOutputStream();
            outbytes =  command.getBytes(Charset.forName("ASCII"));
            stream.write(outbytes);
        }
        catch (IOException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    /// <summary>
    /// 网络打印机 打印的文本
    /// </summary>
    /// <param name="pszString"></param>
    /// <param name="nFontAlign">0:居左 1:居中 2:居右</param>
    /// <param name="nfontsize">字体大小0:正常大小 1:两倍高 2:两倍宽 3:两倍大小 4:三倍高 5:三倍宽 6:三倍大小 7:四倍高 8:四倍宽 9:四倍大小 10:五倍高 11:五倍宽 12:五倍大小</param>
    /// <param name="ifzhenda">0:非针打  1:针打</param>
    public void PrintText(String pszString, int nFontAlign, int nFontSize,int ifzhenda)
    {
        try
        {
            OutputStream stream = socket.getOutputStream();
            command = pcmd.CMD_TextAlign(nFontAlign);
            outbytes =  command.getBytes(Charset.forName("ASCII"));
            stream.write(outbytes);

            if (ifzhenda == 1)
            {
                command = pcmd.CMD_FontSize_BTP_M280(nFontSize);
                outbytes =  command.getBytes(Charset.forName("ASCII"));
                stream.write(outbytes);

                command = pcmd.CMD_FontSize_BTP_M2801(nFontSize);
                outbytes =  command.getBytes(Charset.forName("ASCII"));
                stream.write(outbytes);
            }
            else
            {
                command = pcmd.CMD_FontSize(nFontSize);
                outbytes =  command.getBytes(Charset.forName("ASCII"));
                stream.write(outbytes);
            }

            command = pszString;// +CMD_Enter();
            outbytes =  command.getBytes(Charset.forName("GB2312")); //Charset.defaultCharset()); //forName("UTF-8")
            stream.write(outbytes);
        }
        catch (IOException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return;
        }        

    }

    /// <summary>
    /// 网络打印机 回车
    /// </summary>
    public void PrintEnter()
    {
        try
        {
            command = pcmd.CMD_Enter();
            OutputStream stream = socket.getOutputStream();
            outbytes =  command.getBytes(Charset.forName("ASCII"));
            stream.write(outbytes);
        }
        catch (IOException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    /// <summary>
    /// 网络打印机 切割
    /// </summary>
    /// <param name="pagenum">切割时,走纸行数</param>
    public void CutPage(int pagenum)
    {
        try
        {
            OutputStream stream = socket.getOutputStream();

            command = pcmd.CMD_PageGO(pagenum) + pcmd.CMD_Enter();
            outbytes =  command.getBytes(Charset.forName("ASCII"));
            stream.write(outbytes);

            command = pcmd.CMD_CutPage() + pcmd.CMD_Enter();
            outbytes =  command.getBytes(Charset.forName("ASCII"));
            stream.write(outbytes);

        }
        catch (IOException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    /// <summary>
    /// 网络打印机换行
    /// </summary>
    /// <param name="lines"></param>
    public void PrintNewLines(int lines)
    {
        try
        {
            OutputStream stream = socket.getOutputStream();        

            command = pcmd.CMD_FontSize(0);
            outbytes =  command.getBytes(Charset.forName("ASCII"));
            stream.write(outbytes);
            for (int i = 0; i < lines; i++)
            {
                command = "" + pcmd.CMD_Enter();
                outbytes =  command.getBytes(Charset.forName("ASCII"));
                stream.write(outbytes);
            }
        }
        catch (IOException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

  /// <summary>
    /// 打开钱箱
    /// </summary>
    public void OpenQianXiang()
    {
        try
        {
            OutputStream stream = socket.getOutputStream();
            command = "" + pcmd.CMC_QianXiang();
            outbytes =  command.getBytes(Charset.forName("ASCII"));
            stream.write(outbytes);
        }
        catch (IOException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    /// <summary>
    /// 打印条码
    /// </summary>
    /// <param name="numstr"></param>
    /// <param name="height"></param>
    /// <param name="width"></param>
    /// <param name="numweizi">1:上方  2:下方  0:不打印数字</param>
    /// <param name="fontalign">0:居左 1:居中 2:居右</param>
    /// <param name="fontsize">字体大小0:正常大小 1:两倍高 2:两倍宽 3:两倍大小 4:三倍高 5:三倍宽 6:三倍大小 7:四倍高 8:四倍宽 9:四倍大小 10:五倍高 11:五倍宽 12:五倍大小</param>
    public void PrintTiaoMa(String numstr, int height, int width, int numweizi, int fontalign, int fontsize)
    {
        try
        {
            OutputStream stream = socket.getOutputStream();
            command = pcmd.CMD_TiaoMaHeight(height);
            outbytes =  command.getBytes(Charset.forName("ASCII"));
            stream.write(outbytes);

            command = pcmd.CMD_TiaoMaWidth(width);
            outbytes =  command.getBytes(Charset.forName("ASCII"));
            stream.write(outbytes);

            command = pcmd.CMD_TiaoMaWeiZi(numweizi);
            outbytes =  command.getBytes(Charset.forName("ASCII"));
            stream.write(outbytes);

            command = pcmd.CMD_TextAlign(fontalign);
            outbytes =  command.getBytes(Charset.forName("ASCII"));
            stream.write(outbytes);

            command = pcmd.CMD_FontSize(fontsize);
            outbytes =  command.getBytes(Charset.forName("ASCII"));
            stream.write(outbytes);

            command = pcmd.CMD_TiaoMaPrint(numstr);
            outbytes =  command.getBytes(Charset.forName("ASCII"));
            stream.write(outbytes);
        }
        catch (IOException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

class PrinterCMD
{
    /// <summary>
    /// 初始化打印机
    /// </summary>
    /// <returns></returns>
    public String CMD_SetPos()
    {
        return new StringBuffer().append((char)27).append((char)64).toString();
    }

    /// <summary>
    /// 换行(回车)
    /// </summary>
    /// <returns></returns>
    public String CMD_Enter()
    {
        return new StringBuffer().append((char)10).toString();
    }

    /// <summary>
    /// 对齐模式
    /// </summary>
    /// <param name="align">0:左对齐 1:中对齐 2:右对齐</param>
    /// <returns></returns>
    public String CMD_TextAlign(int align)
    {
        return new StringBuffer().append((char)27).append((char)97).append((char)align).toString();
    }

    /// <summary>
    /// 字体的大小
    /// </summary>
    /// <param name="nfontsize">0:正常大小 1:两倍高 2:两倍宽 3:两倍大小 4:三倍高 5:三倍宽 6:三倍大小 7:四倍高 8:四倍宽 9:四倍大小 10:五倍高 11:五倍宽 12:五倍大小</param>
    /// <returns></returns>
    public String CMD_FontSize(int nfontsize)
    {
        String _cmdstr = "";

        //设置字体大小
        switch (nfontsize)
        {
            case -1:
                _cmdstr = new StringBuffer().append((char)29).append((char)33).append((char)0).toString();//29 33
                break;

            case 0:
                _cmdstr = new StringBuffer().append((char)29).append((char)33).append((char)0).toString();//29 33
                break;

            case 1:
                _cmdstr = new StringBuffer().append((char)29).append((char)33).append((char)1).toString();
                break;

            case 2:
                _cmdstr = new StringBuffer().append((char)29).append((char)33).append((char)16).toString();
                break;

            case 3:
                _cmdstr = new StringBuffer().append((char)29).append((char)33).append((char)17).toString();
                break;

            case 4:
                _cmdstr = new StringBuffer().append((char)29).append((char)33).append((char)2).toString();
                break;

            case 5:
                _cmdstr = new StringBuffer().append((char)29).append((char)33).append((char)32).toString();
                break;

            case 6:
                _cmdstr = new StringBuffer().append((char)29).append((char)33).append((char)34).toString();
                break;

            case 7:
                _cmdstr = new StringBuffer().append((char)29).append((char)33).append((char)3).toString();
                break;

            case 8:
                _cmdstr = new StringBuffer().append((char)29).append((char)33).append((char)48).toString();
                break;

            case 9:
                _cmdstr = new StringBuffer().append((char)29).append((char)33).append((char)51).toString();
                break;

            case 10:
                _cmdstr = new StringBuffer().append((char)29).append((char)33).append((char)4).toString();
                break;

            case 11:
                _cmdstr = new StringBuffer().append((char)29).append((char)33).append((char)64).toString();
                break;

            case 12:
                _cmdstr = new StringBuffer().append((char)29).append((char)33).append((char)68).toString();
                break;

        }
        return _cmdstr;
    }

    /// <summary>
    /// BTP-M280(针打) 倍宽倍高
    /// </summary>
    /// <param name="size">0:取消倍宽倍高模式  1:倍高模式 2:倍宽模式 3:两倍大小</param>
    /// <returns></returns>
    public String CMD_FontSize_BTP_M280(int size)
    {
        String _cmdstr = "";
        //只有0和1两种模式
        int fontsize = size;

        switch (fontsize)
        {
            case 1:
                _cmdstr = new StringBuffer().append((char)28).append((char)33).append((char)8).toString();
                break;
            case 2:
                _cmdstr = new StringBuffer().append((char)28).append((char)33).append((char)4).toString();
                break;
            case 3:
                _cmdstr = new StringBuffer().append((char)28).append((char)87).append((char)1).toString();
                break;
            default:
                _cmdstr = new StringBuffer().append((char)28).append((char)87).append((char)0).toString();
                break;
        }

        return _cmdstr;
    }

    /// <summary>
    /// BTP-M280(针打) 倍宽倍高
    /// </summary>
    /// <param name="size">0:取消倍宽倍高模式  1:倍高模式 2:倍宽模式 3:两倍大小</param>
    /// <returns></returns>
    public String CMD_FontSize_BTP_M2801(int size)
    {
        String _cmdstr = "";
        //只有0和1两种模式
        int fontsize = size;

        switch (fontsize)
        {
            case 1:
                _cmdstr = new StringBuffer().append((char)27).append((char)33).append((char)17).toString();
                break;
            case 2:
                _cmdstr = new StringBuffer().append((char)27).append((char)33).append((char)33).toString();
                break;
            case 3:
                _cmdstr = new StringBuffer().append((char)27).append((char)33).append((char)49).toString();
                break;
            default:
                _cmdstr = new StringBuffer().append((char)27).append((char)33).append((char)1).toString();
                break;
        }

        return _cmdstr;
    }

    /// <summary>
    /// 走纸
    /// </summary>
    /// <param name="line">走纸的行数</param>
    /// <returns></returns>
    public String CMD_PageGO(int line)
    {
        return new StringBuffer().append((char)27).append((char)100).append((char)line).toString();
    }

    /// <summary>
    /// 切割
    /// </summary>
    /// <returns></returns>
    public String CMD_CutPage()
    {
        return new StringBuffer().append((char)27).append((char)109).toString();
    }

    /// <summary>
    /// 返回状态(返回8位的二进制)
    /// </summary>
    /// <param name="num">1:打印机状态 2:脱机状态 3:错误状态 4:传送纸状态</param>
    /// 返回打印机状态如下:
    /// 第一位:固定为0
    /// 第二位:固定为1
    /// 第三位:0:一个或两个钱箱打开  1:两个钱箱都关闭
    /// 第四位:0:联机  1:脱机
    /// 第五位:固定为1
    /// 第六位:未定义
    /// 第七位:未定义
    /// 第八位:固定为0
    ///
    /// 返回脱机状态如下:
    /// 第一位:固定为0
    /// 第二位:固定为1
    /// 第三位:0:上盖关  1:上盖开
    /// 第四位:0:未按走纸键  1:按下走纸键
    /// 第五位:固定为1
    /// 第六位:0:打印机不缺纸  1: 打印机缺纸
    /// 第七位:0:没有出错情况  1:有错误情况
    /// 第八位:固定为0
    ///
    /// 返回错误状态如下:
    /// 第一位:固定为0
    /// 第二位:固定为1
    /// 第三位:未定义
    /// 第四位:0:切刀无错误  1:切刀有错误
    /// 第五位:固定为1
    /// 第六位:0:无不可恢复错误  1: 有不可恢复错误
    /// 第七位:0:打印头温度和电压正常  1:打印头温度或电压超出范围
    /// 第八位:固定为0
    ///
    /// 返回传送纸状态如下:
    /// 第一位:固定为0
    /// 第二位:固定为1
    /// 第三位:0:有纸  1:纸将尽
    /// 第四位:0:有纸  1:纸将尽
    /// 第五位:固定为1
    /// 第六位:0:有纸  1:纸尽
    /// 第七位:0:有纸  1:纸尽
    /// 第八位:固定为0
    /// <returns></returns>
    public String CMD_ReturnStatus(int num)
    {
        return new StringBuffer().append((char)16).append((char)4).append((char)num).toString();
    }

    /// <summary>
    /// 条码高宽
    /// </summary>
    /// <param name="num"></param>
    /// <returns></returns>
    public String CMD_TiaoMaHeight(int num)
    {
        //return ((char)29).append"h" + ((char)num).toString();
        return new StringBuffer().append((char)29).append((char)104).append((char)num).toString();
    }

    /// <summary>
    /// 条码宽度
    /// </summary>
    /// <param name="num"></param>
    /// <returns></returns>
    public String CMD_TiaoMaWidth(int num)
    {
        //return ((char)29).append"w" + ((char)num).toString();
        return new StringBuffer().append((char)29).append((char)119).append((char)num).toString();
    }

    /// <summary>
    /// 条码数字打印的位置
    /// </summary>
    /// <param name="num">1:上方  2:下方  0:不打印数字</param>
    /// <returns></returns>
    public String CMD_TiaoMaWeiZi(int num)
    {
        return new StringBuffer().append((char)29).append("H").append((char)num).toString();
    }

    /// <summary>
    /// 开始打印(条码类型为CODE39)
    /// </summary>
    /// <param name="numstr"></param>
    /// <returns></returns>
    public String CMD_TiaoMaPrint(String numstr)
    {
        //return ((char)29).append"k" + ((char)4).appendnumstr + ((char)0).toString();
        return new StringBuffer().append((char)29).append((char)107).append((char)4).append(numstr).append ((char)0).toString();
    }

    /// <summary>
    /// 打开钱箱
    /// </summary>
    /// <returns></returns>
    public String CMC_QianXiang()
    {
        return new StringBuffer().append((char)27).append((char)112).append((char)0).append((char)60).append((char)255).toString();
    }
}
时间: 2024-11-14 14:06:07

Android连接网络打印机,jSocket连接网络打印机的相关文章

Android中判断网络连接是否可用及监控网络状态

Android中判断网络连接是否可用及监控网络状态 作者: 字体:[增加 减小] 类型:转载 获取网络信息需要在AndroidManifest.xml文件中加入相应的权限,接下来详细介绍Android中判断网络连接是否可用及监控网络状态,感兴趣的朋友可以参考下 获取网络信息需要在AndroidManifest.xml文件中加入相应的权限. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"

Android客户端通过Socket连接服务器

Android客户端通过Socket连接服务器. Android互联网项目中,绝大部分都有连接远程服务器的需求,连接的方式有多种,可以是TCP的方式,当然也可以通过Socket的方式. 相对于TCP的方式,Socket的方式略显的较为原始,对于客户端来说,复杂度反而比TCP的方式还要高一些,毕竟TCP的连接有现成的框架可以使用, 比如Spring等. 而使用socket方式这些工作完全需要客户端来做,也增加了客户端的工作量,不过凡事有利弊,通过socket的方式,流量上 相对于TCP等的方式更加

android设备判断网络连接状态

android开发中,在做网络请求前判断当前网络连接状态有时很有必要.本文将介绍如何获取android设备当前网络连接状态! 所需权限(AndroidManifest.xml文件中添加): <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> Java代码(MainActivity.java文件) package com.example.androidtest; import a

Android编程 获取网络连接状态 及调用网络配置界面

获取网络连接状态 随着3G和Wifi的推广,越来越多的Android应用程序需要调用网络资源,检测网络连接状态也就成为网络应用程序所必备的功能. Android平台提供了ConnectivityManager 类,用于网络连接状态的检测. Android开发文档这样描述ConnectivityManager的作用: Class that answers queries about the state of network connectivity. It also notifies applic

android中检測网络连接状态简单总结

相应差点儿没有不跟网络打交道的android应用,那么在实际中就需求检測手机是否有网络连接.甚至须要推断是何种方式连接,这样能给用户带来更好的体验和一些使用指导,以下给出一些经常使用的推断.假设要知道是否有网络.以及是採用wifi连接的还是3G连接的.调用以下相应方法模型就OK了.代码例如以下: TestNetworkActivity: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29

android 7种网络连接方式《IT蓝豹》

本项目由作者 王永飞 精心为初学者准备的学习项目.android 几种网络连接方式,本项目适合初学者学习网络知识.项目中用到一下几种网络请求方式:(1):HttpClient  方式获取网络数据 (2) : HttpURLConnection 使用原始方式获取数据(3): Volley 方式实现图片加载(4):XUtil方式获取网络(5):ImageLoader 方式加载图片(6):OkHttp 方式获取网络请求 运行效果: 效果源码::http://www.itlanbao.com/code/

android studio 与手机连接调试

android studio 版本不同 连接手机方式有细微的不同,主要方式相似.介绍主要分手机和电脑两部分介绍. 一.手机部分 1.手机端下载一个"一键root权限获取",在安装的过程中需要安装KingRoot,获取手机root权限.网上有些说法,说手机侧不需要获取root权限,我自己尝试失败了.不过不是所有的手机都能获取root权限的.比如我手上的三星就没有能获取到,不过我的老手机多,这也就不是什么问题了 2.下载"ABD Wireless",这是一个adb服务.

《IT蓝豹》android 7种网络连接方式

本项目由作者 王永飞 精心为初学者准备的学习项目.android 几种网络连接方式,本项目适合初学者学习网络知识.项目中用到一下几种网络请求方式:(1):HttpClient  方式获取网络数据 (2) : HttpURLConnection 使用原始方式获取数据(3): Volley 方式实现图片加载(4):XUtil方式获取网络(5):ImageLoader 方式加载图片(6):OkHttp 方式获取网络请求 运行效果: 效果源码:http://www.itlanbao.com/code/2

Android设备使用网络连接调试

最近遇到一个问题,没有usb接口怎么让Android设备与PC机连接起来?后来同事告诉我,原来可以利用网络使其连接起来,这样调试起来就方便多了,还好有个网口提供网络的连接.其实很简单,只需要向system/build.prop文件中添加如下一句即可: service.adb.tcp.port=5555 进入串口终端 [email protected]:/ $ su [email protected]:/ # vi system/build.prop 由于system/build.prop是系统文

Android 检测网络是否连接

权限: <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> 代码如下: package com.example.nettest; import android.net.ConnectivityManager;