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

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

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

  1. Android跟蓝牙耳机建立连接有两种方式

    Android 跟蓝牙耳机建立连接有两种方式. 1. Android 主动跟蓝牙耳机连BluetoothSettings 中和蓝牙耳机配对上之后, BluetoothHeadsetService 会收 ...

  2. Android 蓝牙( Bluetooth)耳机连接分析及实现

    Android 实现了对Headset 和Handsfree 两种profile 的支持.其实现核心是BluetoothHeadsetService,在PhoneApp 创建的时候会启动它. if ( ...

  3. Android和BLE模块连接通信

    首先,进行一下科普: 1.BLE(Bluetooth Low Energy),蓝牙4.0核心profile,主要特点是快速搜索,快速连接,超低功耗保持连接和数据传输,缺点:数据传输速率低,由于其具有低 ...

  4. Android手机用wifi连接adb调试的方法

    https://www.jianshu.com/p/dc6898380e38 0x0 前言 Android开发肯定要连接pc的adb进行调试,传统的方法是用usb与pc进行连接,操作简单即插即用,缺点 ...

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

    Android中判断网络连接是否可用及监控网络状态 作者: 字体:[增加 减小] 类型:转载 获取网络信息需要在AndroidManifest.xml文件中加入相应的权限,接下来详细介绍Android ...

  6. Android 7.1.1 又出幺蛾子了 —— 再谈 Android 上的 Wifi 连接

    在之前的博客文章中,我写了点在 Android 6 系统中连接到指定名称的 Wifi 的体验.然而,在 Android 7 中,有一些东西又变化了.另外就是在那篇文章中我说要提供代码,结果拖到这篇文章 ...

  7. Android开发调试无法连接到夜神模拟器的解决方法

    Android开发调试无法连接到夜神模拟器的解决方法: 一般原因是adb的版本不一致造成的!!!!!换成一样的就可以了. 在网上看到的方法,特记录下来: 1.任务管理器里看下,adb.exe以及nox ...

  8. Android C# java 长连接框架

    mina框架详解 Apache Mina Server 是一个网络通信应用框架,也就是说,它主要是对基于TCP/IP.UDP/IP协议栈的通信框架(当然,也可以提供JAVA 对象的序列化服务.虚拟机管 ...

  9. Android客户端网络预连接优化机制探究

    一.背景 一般情况下,我们都是用一些封装好的网络框架去请求网络,对底层实现不甚关注,而大部分情况下也不需要特别关注处理.得益于因特网的协议,网络分层,我们可以只在应用层去处理业务就行.但是了解底层的一 ...

  10. HTTP长连接和短连接 + Websocket

    HTTP协议与TCP/IP协议的关系 HTTP的长连接和短连接本质上是TCP长连接和短连接.HTTP属于应用层协议,在传输层使用TCP协议,在网络层使用IP协议.IP协议主要解决网络路由和寻址问题,T ...

随机推荐

  1. git常用命令,git版本控制和Xcode结合使用,用Xcode提交到github,github客户端使用

    1.git常用命令 查看命令: 1.git --help 查看git所有命令 2.git clone -help 查看git clone命令的细节 3.git config -l   查看当前所有配置 ...

  2. 用Leangoo做敏捷需求管理-敏捷团队协作

    传统的瀑布工作模式使用详细的需求说明书来表达需求,需求人员负责做需求调研,根据调研情况编制详细的需求说明书,进行需求评审,评审之后签字确认交给研发团队设计开发.在这样的环境下,需求文档是信息传递的主体 ...

  3. JavaScript Patterns 3.1 Object Literal

    Basic concept Values can be properties: primitives or other objects methods: functions User-defined ...

  4. C语言初学者代码中的常见错误与瑕疵(5)

    问题: 素数 在世博园某信息通信馆中,游客可利用手机等终端参与互动小游戏,与虚拟人物Kr. Kong 进行猜数比赛. 当屏幕出现一个整数X时,若你能比Kr. Kong更快的发出最接近它的素数答案,你将 ...

  5. RTB交接

    RTB产品测试进度 元数RTB产品 元数的产品已经测过两个版本,分别是1.1版本和1.2版本,目前线上跑的是1.2版本.程序线上情况目前正常,没有问题. 元数功能账号为:yuanshu  需用root ...

  6. 树莓派3 安装ubuntu-mate

    1.系统安装 1.1.下载ubuntu-mate镜像:https://ubuntu-mate.org/raspberry-pi/ 下载SDFormatterv4:https://www.sdcard. ...

  7. java自带命令工具

    jstat,这个工具很强大,可以监测Java虚拟机GC多方面的状态,具体参数含义参见此链接: ./jstat -gc 84012 1000 3 S0C    S1C    S0U    S1U     ...

  8. phpcms v9调用多个栏目下文章的方法

    示例:{pc:get sql="SELECT * from v9_news where status=99 and catid in(6,7,8) order by id DESC" ...

  9. apache加载php配置

    #载入php模块和ini路径,以及凡是.php开头的以它来处理 LoadModule php5_module E:/server/php/php5apache2_2.dll PHPIniDir &qu ...

  10. 谈MongoDB读取连接超时的异常

    今天在现场的哥们发来异常,让我解决,错误信息如下: HTTP Status 500 - Read operation to server 192.168.1.110:20001 failed on d ...