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();
}
}
Android连接网络打印机,jSocket连接网络打印机的更多相关文章
- Android跟蓝牙耳机建立连接有两种方式
Android 跟蓝牙耳机建立连接有两种方式. 1. Android 主动跟蓝牙耳机连BluetoothSettings 中和蓝牙耳机配对上之后, BluetoothHeadsetService 会收 ...
- Android 蓝牙( Bluetooth)耳机连接分析及实现
Android 实现了对Headset 和Handsfree 两种profile 的支持.其实现核心是BluetoothHeadsetService,在PhoneApp 创建的时候会启动它. if ( ...
- Android和BLE模块连接通信
首先,进行一下科普: 1.BLE(Bluetooth Low Energy),蓝牙4.0核心profile,主要特点是快速搜索,快速连接,超低功耗保持连接和数据传输,缺点:数据传输速率低,由于其具有低 ...
- Android手机用wifi连接adb调试的方法
https://www.jianshu.com/p/dc6898380e38 0x0 前言 Android开发肯定要连接pc的adb进行调试,传统的方法是用usb与pc进行连接,操作简单即插即用,缺点 ...
- Android中判断网络连接是否可用及监控网络状态
Android中判断网络连接是否可用及监控网络状态 作者: 字体:[增加 减小] 类型:转载 获取网络信息需要在AndroidManifest.xml文件中加入相应的权限,接下来详细介绍Android ...
- Android 7.1.1 又出幺蛾子了 —— 再谈 Android 上的 Wifi 连接
在之前的博客文章中,我写了点在 Android 6 系统中连接到指定名称的 Wifi 的体验.然而,在 Android 7 中,有一些东西又变化了.另外就是在那篇文章中我说要提供代码,结果拖到这篇文章 ...
- Android开发调试无法连接到夜神模拟器的解决方法
Android开发调试无法连接到夜神模拟器的解决方法: 一般原因是adb的版本不一致造成的!!!!!换成一样的就可以了. 在网上看到的方法,特记录下来: 1.任务管理器里看下,adb.exe以及nox ...
- Android C# java 长连接框架
mina框架详解 Apache Mina Server 是一个网络通信应用框架,也就是说,它主要是对基于TCP/IP.UDP/IP协议栈的通信框架(当然,也可以提供JAVA 对象的序列化服务.虚拟机管 ...
- Android客户端网络预连接优化机制探究
一.背景 一般情况下,我们都是用一些封装好的网络框架去请求网络,对底层实现不甚关注,而大部分情况下也不需要特别关注处理.得益于因特网的协议,网络分层,我们可以只在应用层去处理业务就行.但是了解底层的一 ...
- HTTP长连接和短连接 + Websocket
HTTP协议与TCP/IP协议的关系 HTTP的长连接和短连接本质上是TCP长连接和短连接.HTTP属于应用层协议,在传输层使用TCP协议,在网络层使用IP协议.IP协议主要解决网络路由和寻址问题,T ...
随机推荐
- Android开发者的Git&GitHub(二)
将代码托管到GitHub上 点击右上角New repository按钮来创建一个版本库 命名后选择添加一个Android项目类型的.gitignore文件,并选择开源协议(例如:Apache v2 ...
- IOS之UI--小实例项目--综合使用
前言: 本博文是基于前一个小实例项目:IOS之UI--小实例项目--添加商品和商品名 进行继续综合学习积累的. 内容大纲 01-综合使用01-plist的使用 02-综合使用02-模型取代字典的好处分 ...
- 用Qt开发第一个Hello World程序
配置好Qt的环境变量之后,我们才可以进行下面的通过终端来使用Qt开发这个第一个程序 因为Qt的文件路径不能有中文否则会报错,所以一般都把工程文件都建立在根目录 我们创建的Qt程序包含两个部分:1.GU ...
- java编程思想第四版中net.mindview.util包下载,及源码简单导入使用
在java编程思想第四版中需要使用net.mindview.util包,大家可以直接到http://www.mindviewinc.com/TIJ4/CodeInstructions.html 去下载 ...
- poj邮局1160
题目是给出V个村庄,取出P个做为邮局,要求每个村庄到邮局的距离和最小. 先考虑只有一个邮局的情况,不管你怎么放邮局和最小的情况总是在中点的位置. 再来考虑P>1的情况: 假设P-1个邮局已经选好 ...
- js中 字符串与Unicode 字符值序列的相互转换
一. 字符串转Unicode 字符值序列 var str = "abcdef"; var codeArr = []; for(var i=0;i<str.length;i++ ...
- 软件测试Lab2
1.本次上机实验任务:使用webDriver完后自动化测试 2.本次上机实验目的:掌握webDriver的用法和配置. 3.本次上机实验内容: 3.1Selenium的安装: 首先我们上Seleniu ...
- ubuntu不能访问windows中的文件
出现不能访问某个盘时(例如:OS) Error mounting /dev/sda5 at /media/user/OS: Command-line `mount -t "ntfs" ...
- SQL将用户表中已存在的数据所有姓名(汉字)转换为拼音首字母
实现方法: --函数 Create function [dbo].[fn_GetPy](@str nvarchar(4000)) returns nvarchar(4000) --用于加密 --WIT ...
- Debian
一.简介 https://zh.wikipedia.org/wiki/Debian 二.下载 https://www.debian.org/ 三.配置 1)挂载iso镜像 mount /dev/cdr ...