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

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. ubuntu15.10 给解压版的eclipse安装桌面快捷方式

    在桌面用vi 建立eclipse.desktop文件,并赋予权限 sudo chmod  u+x  /home/liujl/Desktop/eclipse.desktop [Desktop Entry ...

  2. Scrum不是万能药,要在时机成熟时推行

    敏捷很火热,大家都在谈敏捷:但不是所有团队都适合敏捷! 需要等待时机,时机成熟了,才推! 什么时候算时机成熟呢? 我们的经验是需要两点: 一.团队有三名或以上的研发工程师 : 二. 团队内有一名合适的 ...

  3. CListCtrl中删除多个不连续的行

    ==================================声明================================== 本文原创,转载在正文中显要的注明作者和出处,并保证文章的完 ...

  4. 编译流程,C开发常见文件类型名

    编译流程 我们常说的编译是一个整体的概念,是指从源程序到可执行程序的整个过程,实际上,C语言编译的过程可以进一步细分为预编译->编译->汇编->链接 预编译是把include关键字所 ...

  5. C中不安全函数

    C 中大多数缓冲区溢出问题可以直接追溯到标准 C 库.最有害的罪魁祸首是不进行自变量检查的.有问题的字符串操作(strcpy.strcat.sprintf 和 gets).一般来讲,象“避免使用 st ...

  6. WCF 删除队列

    Configuration config = ConfigurationManager.OpenExeConfiguration (ConfigurationUserLevel.None); Serv ...

  7. 《TCP/IP详解 卷一》读书笔记-----TCP连接建立

    1.在每个TCP报文段中,头部的flag字段里的SYN,FIN,RST,PSH可以多个有效,并没有限定为必须只有一个 2.TCP连接建立过程: 1)客户端发送一个SYN报文段,其中包含了客户端要传送的 ...

  8. 【C#】SQL数据库助手类2.0(自用)

    using System; using System.Collections.Generic; using System.Configuration; using System.Data; using ...

  9. 第05篇. Tomcat和JDK的内存配置

    站在人群,我毫不起眼:活在世上,我不玩心眼! 没有那么远大的目标,但是也不要把我当成傻子! --胖先生 放在前面要说的话:JVM内存分配设置的参数有四个 -Xmx Java Heap最大值,默认值为物 ...

  10. POJ 1515 Street Directions --一道连通题的双连通和强连通两种解法

    题意:将一个无向图中的双向边改成单向边使图强连通,问最多能改多少条边,输出改造后的图. 分析: 1.双连通做法: 双连通图转强连通图的算法:对双连通图进行dfs,在搜索的过程中就能按照搜索的方向给所有 ...