Android手持系统PDA打印小票 您所在的位置:网站首页 小票打印机模版样式 Android手持系统PDA打印小票

Android手持系统PDA打印小票

2023-11-23 22:33| 来源: 网络整理| 查看: 265

 这几天有个朋友要在安卓系统的PDA上进行打印小票,PDA是智谷联的3505,自带打印小票功能,经过几天的研究,把打印代码分享出来,PDA打印的底层是调用第三方的DLL,是用C++写的,安卓要调用C++的代码进行打印。

 PDA上打印是使用串口进行打印的,首先要打开串口号,使用完要关闭端口。

 打印效果如下图

打印代码如下

 打印包括如下步骤,初始化端口,打开端口 ,打印小票,打印二维码,关闭端口

package com.example.cangku; import java.text.SimpleDateFormat; import java.util.Hashtable; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.clienthods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.util.EntityUtils; import com.example.application.MyApplication; import com.google.zxing.BarcodeFormat; import com.google.zxing.EncodeHintType; import com.google.zxing.WriterException; import com.google.zxing.common.BitMatrix; import com.google.zxing.qrcode.QRCodeWriter; import com.smartdevicesdk.printer.PrintService; import com.smartdevicesdk.printer.PrinterClassSerialPort3505; import com.smartdevicesdk.printer.PrinterCommand; import android.app.Activity; import android.content.Intent; import android.content.SharedPreferences; import android.graphics.Bitmap; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.View; import android.view.Window; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; public class PrintBaoZhuangActivity extends Activity { private Button btnpringka; private String device = "/dev/ttyMT0"; private int baudrate = 115200; PrinterClassSerialPort3505 printerClass = null; private String barCode,baozhuangcode; private String kehu,orderno,zhiling,xingti,pinming,guige,yanse,num,daiwei; private TextView guanbi,tvpkehu,tvporder,tvpzhiling,tvpxingti,tvppinming,tvpguige,tvpyanse,tvpnum,tvpdaiwei; private static final int RESULT_FROM_SERVER=1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.printbaozhuang); baozhuangcode=getIntent().getStringExtra("baozhuangcode"); barCode=getIntent().getStringExtra("code"); kehu=getIntent().getStringExtra("kehu"); orderno=getIntent().getStringExtra("orderno"); zhiling=getIntent().getStringExtra("zhiling"); xingti=getIntent().getStringExtra("xingti"); pinming=getIntent().getStringExtra("pinming"); guige=getIntent().getStringExtra("guige"); yanse=getIntent().getStringExtra("yanse"); num=getIntent().getStringExtra("num"); daiwei=getIntent().getStringExtra("danwei"); tvpkehu=(TextView) findViewById(R.id.tvpkehu); tvporder=(TextView) findViewById(R.id.tvporder); tvpzhiling=(TextView) findViewById(R.id.tvpzhiling); tvpxingti=(TextView) findViewById(R.id.tvpxingti); tvppinming=(TextView) findViewById(R.id.tvppinming); tvpguige=(TextView) findViewById(R.id.tvpguige); tvpyanse=(TextView) findViewById(R.id.tvpyanse); tvpnum=(TextView) findViewById(R.id.tvpnum); tvpdaiwei=(TextView) findViewById(R.id.tvpdaiwei); tvpkehu.setText(kehu); tvporder.setText(orderno); tvpzhiling.setText(zhiling); tvpxingti.setText(xingti); tvpyanse.setText(yanse); tvppinming.setText(pinming); tvpnum.setText(num); tvpguige.setText(guige); tvpdaiwei.setText(daiwei); guanbi=(TextView) findViewById(R.id.guanbi); guanbi.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { finish(); } }); //打印 btnpringka=(Button) findViewById(R.id.btnpringka); printerClass = new PrinterClassSerialPort3505(device, baudrate, mhandler); btnpringka.setOnClickListener(new OnClickListener(){ @Override public void onClick(View arg0) { // TODO Auto-generated method stub openAndcloseDevice(); printerClass.printText(GetPrintStr()); createQRImage(baozhuangcode); System.gc(); //printerClass.printText("******************************\n"); if (printerClass.mSerialPort.isOpen) { printerClass.close(); } setResult(Activity.RESULT_OK); finish(); } }); } //打开端口 private void openAndcloseDevice() { if (printerClass.mSerialPort.isOpen) { printerClass.close(); printerClass = new PrinterClassSerialPort3505(device, baudrate, mhandler); printerClass.device = device; printerClass.baudrate = baudrate; printerClass.open(); //printerClass.write(new byte[] { 0x1b, 0x76 }); printerClass.write(new byte[] { 0x1b, 0x4d, 0x01 });//设置字体 printerClass.write(new byte[] { 0x1d, 0x21, 0x11 });//设置字体大小 printerClass.write(new byte[] { 0x1b, 0x33, 0x10 });//深圳行间距 } else { printerClass.device = device; printerClass.baudrate = baudrate; printerClass.open(); //printerClass.write(new byte[] { 0x1b, 0x76 }); printerClass.write(new byte[] { 0x1b, 0x4d, 0x01 });//设置字体 printerClass.write(new byte[] { 0x1d, 0x21, 0x11 });//设置字体大小 printerClass.write(new byte[] { 0x1b, 0x33, 0x10 });//深圳行间距 } } //打印小票 public String GetPrintStr() { /*kehu="爱都"; pinming="56条网络"; zhiling="Z001"; xingti="X001"; guige="55英寸"; num="20"; orderno="PO-16-001";*/ StringBuilder sb = new StringBuilder(); sb.append("\n"); //sb.append("*********************************\n"); sb.append("客 户:" +kehu+ "\n"); sb.append("品 名:" + pinming + "\n"); sb.append("指 令:" + zhiling + "\n"); sb.append("型体号:" + xingti + "\n"); sb.append("规 格:" + guige + "\n"); sb.append("数 量:" + num +daiwei+"\n"); sb.append("订单号:" + orderno + "\n"); sb.append("颜 色:" + yanse + "\n"); sb.append(" "+baozhuangcode+"\n"); //sb.append("------------------------------\r\n"); return sb.toString(); } //打印二维码 public void createQRImage(String url) { try { int QR_WIDTH=250; int QR_HEIGHT=250; //判断URL合法性 if (url == null || "".equals(url) || url.length() < 1) { return; } Hashtable hints = new Hashtable(); hints.put(EncodeHintType.CHARACTER_SET, "utf-8"); //图像数据转换,使用了矩阵转换 BitMatrix bitMatrix = new QRCodeWriter().encode(url, BarcodeFormat.QR_CODE, QR_WIDTH, QR_HEIGHT, hints); int[] pixels = new int[QR_WIDTH * QR_HEIGHT]; //下面这里按照二维码的算法,逐个生成二维码的图片, //两个for循环是图片横列扫描的结果 for (int y = 0; y < QR_HEIGHT; y++) { for (int x = 0; x < QR_WIDTH; x++) { if (bitMatrix.get(x, y)) { pixels[y * QR_WIDTH + x] = 0xff000000; } else { pixels[y * QR_WIDTH + x] = 0xffffffff; } } } //生成二维码图片的格式,使用ARGB_8888 Bitmap bitmap = Bitmap.createBitmap(QR_WIDTH, QR_HEIGHT, Bitmap.Config.ARGB_8888); bitmap.setPixels(pixels, 0, QR_WIDTH, 0, 0, QR_WIDTH, QR_HEIGHT); //显示到一个ImageView上面 // imgQr.setImageBitmap(bitmap); printerClass.printImage(bitmap); //bitmap.recycle(); } catch (WriterException e) { e.printStackTrace(); } } Handler mhandler = new Handler() { public void handleMessage(Message msg) { switch (msg.what) { case PrinterCommand.MESSAGE_READ: byte[] readBuf = (byte[]) msg.obj; //Log.i(TAG, "readBuf:" + readBuf[0]); if (readBuf[0] == 0x13) { //checkBoxAuto.setChecked(false); PrintService.isFUll = true; /*textViewState.setText(getResources().getString( R.string.str_printer_state) + ":" + getResources().getString( R.string.str_printer_bufferfull));*/ } else if (readBuf[0] == 0x11) { PrintService.isFUll = false; /* textViewState.setText(getResources().getString( R.string.str_printer_state) + ":" + getResources().getString( R.string.str_printer_buffernull));*/ } else if (readBuf[0] == 0x08) { /*checkBoxAuto.setChecked(false); textViewState.setText(getResources().getString( R.string.str_printer_state) + ":" + getResources().getString( R.string.str_printer_nopaper));*/ } else if (readBuf[0] == 0x01) { /*textViewState.setText(getResources().getString( R.string.str_printer_state) + ":" + getResources().getString( R.string.str_printer_printing));*/ } else if (readBuf[0] == 0x04) { /*checkBoxAuto.setChecked(false); textViewState.setText(getResources().getString( R.string.str_printer_state) + ":" + getResources().getString( R.string.str_printer_hightemperature));*/ } else if (readBuf[0] == 0x02) { /*checkBoxAuto.setChecked(false); textViewState.setText(getResources().getString( R.string.str_printer_state) + ":" + getResources().getString( R.string.str_printer_lowpower));*/ } else if (readBuf[0] == 0x00) { } else { String readMessage = new String(readBuf, 0, msg.arg1); if (readMessage.contains("800"))// 80mm paper { PrintService.imageWidth = 72; Toast.makeText(getApplicationContext(), "80mm", Toast.LENGTH_SHORT).show(); } else if (readMessage.contains("580"))// 58mm paper { PrintService.imageWidth = 48; Toast.makeText(getApplicationContext(), "58mm", Toast.LENGTH_SHORT).show(); } } break; case PrinterCommand.MESSAGE_STATE_CHANGE: switch (msg.arg1) { case PrinterCommand.STATE_CONNECTED: break; case PrinterCommand.STATE_CONNECTING: Toast.makeText(getApplicationContext(), "STATE_CONNECTING", Toast.LENGTH_SHORT).show(); break; case PrinterCommand.STATE_LISTEN: case PrinterCommand.STATE_NONE: break; case PrinterCommand.SUCCESS_CONNECT: printerClass.write(new byte[] { 0x1b, 0x2b }); Toast.makeText(getApplicationContext(), "SUCCESS_CONNECT", Toast.LENGTH_SHORT).show(); break; case PrinterCommand.FAILED_CONNECT: Toast.makeText(getApplicationContext(), "FAILED_CONNECT", Toast.LENGTH_SHORT).show(); break; case PrinterCommand.LOSE_CONNECT: Toast.makeText(getApplicationContext(), "LOSE_CONNECT", Toast.LENGTH_SHORT).show(); } break; case PrinterCommand.MESSAGE_WRITE: break; case PrinterCommand.PERMIT_PRINTER: String result = (String) msg.obj; //Toast.makeText(getApplicationContext(),"允许打印", Toast.LENGTH_SHORT).show(); break; case PrinterCommand.FORBID_PRINTER: String forbid_print = (String) msg.obj; Toast.makeText(getApplicationContext(),"禁止打印", Toast.LENGTH_SHORT).show(); break; case PrinterCommand.TIMEOUT_PRINTER: String print_timeout = (String) msg.obj; Toast.makeText(getApplicationContext(),"打印超时", Toast.LENGTH_SHORT).show(); break; } super.handleMessage(msg); } }; }



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有