android java epson串口打印机
package com.common.util.portprinter;
import java.io.IOException;
import java.io.OutputStream;
import com.common.util.PrinterParameterConf;
/**
* @author ChenMing
*
*/
public class PortPrinterBase {
private OutputStream out;
protected int lineCount = 40;
private String printType="0";
public PortPrinterBase(OutputStream out, String printType){
this.out = out;
this.printType = printType;
initPrinter();
String lineCountStr = PrinterParameterConf.printerParameterConf.getProperty(PrinterParameterConf.LINEPRINTERCHARCOUNT_NAME);
try{
int temp = Integer.parseInt(lineCountStr);
this.lineCount = temp;
}catch(Exception e){
}
}
protected final String LEFT = "LEFT";
protected final String CENTER = "CENTER";
protected final String RIGHT = "RIGHT";
public static final byte HT = 0x9;
public static final byte LF = 0x0A;
public static final byte CR = 0x0D;
public static final byte ESC = 0x1B;
public static final byte DLE = 0x10;
public static final byte GS = 0x1D;
public static final byte FS = 0x1C;
public static final byte STX = 0x02;
public static final byte US = 0x1F;
public static final byte CAN = 0x18;
public static final byte CLR = 0x0C;
public static final byte EOT = 0x04;
/* 初始化打印机 */
public static final byte[] ESC_INIT = new byte[] {ESC, '@'};
/* 设置标准模式 */
public static final byte[] ESC_STANDARD = new byte[] {ESC, 'S'};
/* 设置汉字打印模式 */
public static final byte[] ESC_CN_FONT = new byte[] {FS, '&'};
/* 选择字符集 */
public static final byte[] ESC_SELECT_CHARACTER = new byte[] {ESC, 'R', 9};
/* 设置用户自定义汉字字体 焗7118 */
public static final byte[] ESC_FS_2 = new byte[] {FS, 0x32, 0x71, 0x18};
/* 取消用户自定义字体 */
public static final byte[] ESC_CANCEL_DEFINE_FONT = new byte[]{ESC, '%', 0};
/* 打开钱箱指令 */
public static final byte[] ESC_OPEN_DRAWER = new byte[]{ESC, 'p', 0x00, 0x10, (byte) 0xff};
/* 切纸指令GS V m
* m 0,48 Executes a full cut(cuts the paper completely)
* 1,49 Excutes a partilal cut(one point left uncut)
*/
public static final byte[] POS_CUT_MODE_FULL = new byte[]{GS, 'V', 0x00};
public static final byte[] POS_CUT_MODE_PARTIAL = new byte[]{GS, 'V', 0x01};
/* 西文字符 (半宽)字体A (6 ×12),汉字字符 (全宽)字体A (12×12) */
public static final byte[] ESC_FONT_A = new byte[]{ESC, '!', 0};
/* 西文字符 (半宽)字体B (8×16),汉字字符 (全宽)字体B (16×16) */
public static final byte[] ESC_FONT_B = new byte[]{ESC, '!', 1};
/* 12*24 0/48*/
public static final byte[] ESC_FONTA= new byte[]{ESC, 'M', 48};
/* 9*17 1/49*/
public static final byte[] ESC_FONTB= new byte[]{ESC, 'M', 1};
/* 默认颜色字体指令 */
public static final byte[] ESC_FONT_COLOR_DEFAULT = new byte[] {ESC, 'r', 0x00};
/* 红色字体指令 */
public static final byte[] ESC_FONT_COLOR_RED = new byte[] {ESC, 'r', 0x01 };
/* 标准大小 */
public static final byte[] FS_FONT_ALIGN = new byte[]{FS, 0x21, 1, ESC, 0x21, 1};
/* 横向放大一倍 */
public static final byte[] FS_FONT_ALIGN_DOUBLE = new byte[]{FS, 0x21, 4, ESC, 0x21, 4};
/* 纵向放大一倍 */
public static final byte[] FS_FONT_VERTICAL_DOUBLE = new byte[]{FS, 0x21, 8, ESC, 0x21, 8, GS, '!', 0x01};
/* 横向纵向都放大一倍 */
public static final byte[] FS_FONT_DOUBLE = new byte[]{FS, 0x21, 12, ESC, 0x21, 48};
/* 靠左打印命令 */
public static final byte[] ESC_ALIGN_LEFT = new byte[]{0x1b,'a', 0x00};
/* 居中打印命令 */
public static final byte[] ESC_ALIGN_CENTER = new byte[]{0x1b,'a', 0x01};
/* 靠右打印命令 */
public static final byte[] ESC_ALIGN_RIGHT = new byte[]{0x1b,'a', 0x02};
/* 字体加粗 */
public static final byte[] ESC_SETTING_BOLD = new byte[]{ESC, 0x45, 1};
/* 取消字体加粗 */
public static final byte[] ESC_CANCEL_BOLD = new byte[]{ESC, 0x45, 0};
//DLE EOT n 实时状态传送
//如果返回结果为22
/**
* 、DLE EOT n 实时状态传送
[格式] ASCII码 DLE EOT n
十六进制码 10 04 n
十进制码 16 4 n
[范围] 1 ≤ n ≤ 4
[描述] 根据下列参数,实时传送打印机状态,参数 n 用来指定所要传送的打印机状态:
n = 1:传送打印机状态
n = 2:传送脱机状态
n = 3:传送错误状态
n = 4:传送纸传感器状态
[注释] 打印机收到该命令后立即返回相关状态
该命令尽量不要插在2个或更多字节的命令序列中。
即使打印机被ESC =(选择外设)命令设置为禁止,该命令依然有效。
打印机传送当前状态,每一状态用1个字节数据表示。
打印机传送状态时并不确认主机是否收到。
打印机收到该命令立即执行。
该命令只对串口打印机有效。打印机在任何状态下收到该命令都立即执行。
*/
public static final byte[] PRINT_STATE_DLE_EOT = new byte[] {DLE, EOT,0x01};
public void initPrinter(){
try {
//modify by gongqiyi 20090917
//ESC_INIT 将在清空缓存区的数据
//out.write(ESC_INIT);
//自定义字体
//out.write(ESC_FS_2);
out.write(ESC_STANDARD);
out.write(ESC_CANCEL_DEFINE_FONT);
out.write(ESC_FONTA);
out.write(ESC_SELECT_CHARACTER);
//进入汉字模式打印
//out.write(ESC_CN_FONT);
//out.write(ESC_FONT_B);
//out.write(ESC_FONTA);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 走纸到切纸位置并切纸
*/
public void executeLineFeedAndPaperCut(){
try {
out.write(PrinterParameterConf.printerParameterConf.getProperty
(PrinterParameterConf.PRINTCUTLINE_NAME).getBytes());
out.write(POS_CUT_MODE_PARTIAL);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 单据头打印
* @param str
*/
public void billHeaderPrinter(String str){
try {
out.write(ESC_ALIGN_CENTER);
out.write(FS_FONT_DOUBLE);
out.write((str+"\n").getBytes());
out.write(LF);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 叫单号打印
* @param str
*/
public void callNumPrinter(String str){
try {
out.write(ESC_ALIGN_LEFT);
out.write(FS_FONT_DOUBLE);
out.write((str+"\n").getBytes());
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 双倍大小字体
* @param str
*/
public void doubleSizePrinter(String str, String align){
try {
if(CENTER.equals(align)){
out.write(ESC_ALIGN_LEFT);
}else if(RIGHT.equals(align)){
out.write(ESC_ALIGN_RIGHT);
}else{
out.write(ESC_ALIGN_LEFT);
}
out.write(FS_FONT_DOUBLE);
out.write((str+"\n").getBytes());
//out.write(LF);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 标准字体打印一行
* @param str 需打印的字符串
* @param align 打印的位置 LEFT/CENTER/RIGHT 其他为默认居左打印
*/
public void standardPrinterLine(String str, String align){
try{
if(CENTER.equals(align)){
out.write(ESC_ALIGN_CENTER);
out.write(FS_FONT_ALIGN);
out.write(ESC_CN_FONT);
out.write(ESC_CANCEL_BOLD);
if("1".equals(printType)){
out.write(ESC_FONTA);
}else{
out.write(ESC_FONT_B);
}
out.write(str.getBytes());
}else if(RIGHT.equals(align)){
out.write(ESC_ALIGN_RIGHT);
out.write(FS_FONT_ALIGN);
out.write(ESC_CN_FONT);
out.write(ESC_CANCEL_BOLD);
if("1".equals(printType)){
out.write(ESC_FONTA);
}else{
out.write(ESC_FONT_B);
}
out.write(str.getBytes());
}else{
out.write(ESC_ALIGN_LEFT);
out.write(FS_FONT_ALIGN);
out.write(ESC_CN_FONT);
out.write(ESC_CANCEL_BOLD);
if("1".equals(printType)){
out.write(ESC_FONTA);
}else{
out.write(ESC_FONT_B);
}
out.write(str.getBytes());
}
out.write("\n".getBytes());
}catch(IOException e) {
e.printStackTrace();
}
}
/**
* 标准粗体字体打印一行
* @param str 需打印的字符串
* @param align 打印的位置 LEFT/CENTER/RIGHT 其他为默认居左打印
*/
public void standardBoldPrinterLine(String str, String align){
try{
if(CENTER.equals(align)){
out.write(ESC_ALIGN_CENTER);
out.write(FS_FONT_ALIGN);
out.write(ESC_CN_FONT);
out.write(ESC_SETTING_BOLD);
if("1".equals(printType)){
out.write(ESC_FONTA);
}else{
out.write(ESC_FONT_B);
}
out.write(str.getBytes());
}else if(RIGHT.equals(align)){
out.write(ESC_ALIGN_RIGHT);
out.write(FS_FONT_ALIGN);
out.write(ESC_CN_FONT);
out.write(ESC_SETTING_BOLD);
if("1".equals(printType)){
out.write(ESC_FONTA);
}else{
out.write(ESC_FONT_B);
}
out.write(str.getBytes());
}else{
out.write(ESC_ALIGN_LEFT);
out.write(FS_FONT_ALIGN);
out.write(ESC_CN_FONT);
out.write(ESC_SETTING_BOLD);
if("1".equals(printType)){
out.write(ESC_FONTA);
}else{
out.write(ESC_FONT_B);
}
out.write(str.getBytes());
}
out.write("\n".getBytes());
}catch(IOException e) {
e.printStackTrace();
}
}
/**
* 双倍宽字体按行打印
* @param str
* @param align
*/
public void largeSizePrinterLine(String str, String align){
try{
if(CENTER.equals(align)){
out.write(ESC_ALIGN_CENTER);
out.write(FS_FONT_ALIGN_DOUBLE);
out.write(str.getBytes());
}else if(RIGHT.equals(align)){
out.write(ESC_ALIGN_RIGHT);
out.write(FS_FONT_ALIGN_DOUBLE);
out.write(str.getBytes());
}else{
out.write(ESC_ALIGN_LEFT);
out.write(FS_FONT_ALIGN_DOUBLE);
out.write(str.getBytes());
}
out.write("\n".getBytes());
}catch(IOException e) {
e.printStackTrace();
}
}
/**
* 双倍高字体按行打印
* @param str
* @param align
*/
public void largeHSizePrinterLine(String str, String align){
try{
if(CENTER.equals(align)){
out.write(ESC_ALIGN_CENTER);
out.write(FS_FONT_VERTICAL_DOUBLE);
out.write(str.getBytes());
}else if(RIGHT.equals(align)){
out.write(ESC_ALIGN_RIGHT);
out.write(FS_FONT_VERTICAL_DOUBLE);
out.write(str.getBytes());
}else{
out.write(ESC_ALIGN_LEFT);
out.write(FS_FONT_VERTICAL_DOUBLE);
out.write(str.getBytes());
}
out.write("\n".getBytes());
}catch(IOException e) {
e.printStackTrace();
}
} /**
* 大号字体红色按行打印
* @param str
* @param align
*/
public void largeSizeRedPrinterLine(String str, String align){
try{
if(CENTER.equals(align)){
out.write(ESC_ALIGN_CENTER);
out.write(FS_FONT_ALIGN_DOUBLE);
out.write(ESC_FONT_COLOR_RED);
out.write(str.getBytes());
}else if(RIGHT.equals(align)){
out.write(ESC_ALIGN_RIGHT);
out.write(FS_FONT_ALIGN_DOUBLE);
out.write(ESC_FONT_COLOR_RED);
out.write(str.getBytes());
}else{
out.write(ESC_ALIGN_LEFT);
out.write(FS_FONT_ALIGN_DOUBLE);
out.write(ESC_FONT_COLOR_RED);
out.write(str.getBytes());
}
out.write("\n".getBytes());
}catch(IOException e) {
e.printStackTrace();
}
}
public void openDrawer(){
try {
out.write(ESC_OPEN_DRAWER);
} catch (IOException e) {
e.printStackTrace();
}
}
public String makePrintString(int lineChars, String txt1, String txt2){
if(txt1 == null){
txt1 = "";
}
if(txt2 == null){
txt2 = "";
}
int spaces = 0;
String tab = "";
try{
spaces = lineChars - (txt1.getBytes().length + txt2.getBytes().length);
for (int j = 0 ; j < spaces ; j++){
tab += " ";
}
}catch(Exception e){
e.printStackTrace();
}
return txt1 + tab + txt2;
}
public String makePrintString(int lineChars, String txt1, String txt2, String txt3){
if(txt1 == null){
txt1 = "";
}
if(txt2 == null){
txt2 = "";
}
if(txt3 == null){
txt3 = "";
}
int spaces = 0;
int lineChars1 = lineChars*2/3;
String tab = "";
String returnStr = txt1;
try{
spaces = lineChars1 - (returnStr.getBytes().length + txt2.getBytes().length);
for (int j = 0 ; j < spaces ; j++){
tab += " ";
}
returnStr = txt1 + tab + txt2;
spaces = lineChars - (returnStr.getBytes().length + txt3.getBytes().length);
tab = "";
for (int j = 0 ; j < spaces ; j++){
tab += " ";
}
returnStr = returnStr + tab + txt3;
}catch(Exception e){
e.printStackTrace();
}
return returnStr;
}
}
android java epson串口打印机的更多相关文章
- Java jacob调用打印机打印word文档
前面说了Java如何生成复杂的Word文档,今年记录下Java如何调用打印机打印word文档. 起初用的是自带的PrintJob,但是系统提供的打印机制并不成熟完整.网上的代码也是千篇一律,在我的打印 ...
- java实现串口通讯
一. 准备工作 1. 点击此下载java串口通讯相关工具 2. 将RXTXcomm.jar放到 %JAVA_HOME%\jre\lib\ext\ 目录下,工程中引入该jar包 3. 将rxtxSe ...
- .NET/android/java/iOS AES通用加密解密(修正安卓)
移动端越来越火了,我们在开发过程中,总会碰到要和移动端打交道的场景,比如.NET和android或者iOS的打交道.为了让数据交互更安全,我们需要对数据进行加密传输.今天研究了一下,把几种语言的加密都 ...
- Android java传递int类型数组给C
接着前面的文章<Android java传递int类型数据给C><Android java传递string类型数据给C>,继续实践 实现public native int[] ...
- Android java传递string类型数据给C
本文接着实现<Android java传递int类型数据给C>的还未实现的方法: public native String sayHelloInC(String s); 先贴一个工具方法, ...
- .NET/android/java/iOS AES通用加密解密
移动端越来越火了,我们在开发过程中,总会碰到要和移动端打交道的场景,比如.NET和android或者iOS的打交道.为了让数据交互更安全,我们需要对数据进行加密传输.今天研究了一下,把几种语言的加密都 ...
- android Java BASE64编码和解码二:图片的编码和解码
1.准备工作 (1)在项目中集成 Base64 代码,集成方法见第一篇博文:android Java BASE64编码和解码一:基础 (2)添加 ImgHelper 工具类 package com.a ...
- 用Java通过串口发送手机短信
用Java通过串口发短信其实很简单,因为有现成的类库供我们使用.有底层的类库,也有封装好一点的类库,下面我介绍一下在 Win32 平台下发送短信的方法. 如果你想用更底层的类库开发功能更强大的应用程序 ...
- CC++初学者编程教程(10) 搭建Android java C/C++ NDK QTforAndroid 开发环境
1 安装JDK 2 点下一步 3 点下一步 4 开始安装 5 定制路径,点下一步 6 开始安装 7 安装完成, 8 解压缩 9 启动eclipse 10 看到启动画面 11 设置工作文件夹 12 单击 ...
随机推荐
- php前端传过来的json数据丢失 (max_input_vars)
开发向我反馈,前端业务页面提交数据用js将要传输的数据用json dump后,发给服务器,服务器在loads后发现数据是不全的. 这个问题困扰开发人员和运维人员.首先调整php.ini文件的上传文件数 ...
- 在oracle配置mysql数据库的dblink
本文介绍如何在oracle配置mysql数据库的dblink:虽然dblink使用很占资源:俗称“性能杀手”.但有些场景不得不使用它.例如公司使用数据库是oracle:可能其他部门或者CP合作公司使用 ...
- 如何关闭Struts2的webconsole.html
出于安全目的,在禁用了devMode之后,仍然不希望其他人员看到webconsole.html页面,则可以直接删除webconsole.html 的源文件, 它的位置存在于: 我们手工删除 strut ...
- zabbix的启动和关闭脚本
1. zabbix客户端的系统服务脚本 1.1 拷贝启动脚本 zabbix的源码提供了系统服务脚本,在/usr/local/src/zabbix-3.2.6/misc/init.d目录下,我的系统是C ...
- mybayis 之resultType="map"
List<Map> publishInfos = memberShareMapper.shareToCouponCountGroupByPublishId(memberShare.getA ...
- JQuery选择器和DOM的操作-入门学习
嘿嘿,今天学习了JQuery,前面的一周都在学习javascript,今天学习了JQuery,虽然javascript的类库有很多个,例如:Prototype,Dojo,JQuery等,javascr ...
- 使用java发送QQ邮件
使用java发送邮件的时候,需要先下载两个jar包,连接如下: JavaMail mail.jar 1.4.5 JAF(版本 1.1.1) activation.jar 然后将这连个包导入,博主用的是 ...
- Webpack2 升级指南和特性摘要(转)
Webpack2 升级指南和特性摘要 resolve.root, resolve.fallback, resolve.modulesDirectories 上述三个选项将被合并为一个标准配置项:res ...
- 题目1448:Legal or Not(有向无环图判断——拓扑排序问题)
题目链接:http://ac.jobdu.com/problem.php?pid=1448 详解链接:https://github.com/zpfbuaa/JobduInCPlusPlus 参考代码: ...
- win8/win7中使用Git Extensions PuTTy模式提交时 git-credential-winstore.exe": No such file or directory 错误解决方案
参考:http://www.cnblogs.com/hlizard/p/3627792.html 报错类似以下错误 \"F:/GitExtensions/GitCredentialWinSt ...