Android 蓝牙打印小票与WiFi打印小票两种打印方式的实现(带有图片和二维码)

最近在做小票打印这块,项目需求是蓝牙和WiFi两种都要实现,开始做的时候也是一脸懵,然后网上找了一些代码,看了好多博主的文章,最后自己把这些都综合到一起0.0,结果还好成功了

先看看图吧,蓝牙和WiFi打印出的都是一样的,毕竟都是同一个工具类(打印机型号  爱宝POS-80C 、 资江 ZJ-80)

先来看看WiFi打印(旁边的色块是打印纸自带的,我也很无奈)

首先在你的activity里触发点击事件

right = (TextView) findViewById(R.id.right);//点击WiFi打印
right.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        pos();
    }
});

//调用打印的方法

    private void pos() {
        // 开启一个子线程
        new Thread() {
            public void run() {
                try {              //打印机网口IP    打印机端口号     编码方式
                    pos = new Pos(Preference.instance(PayTypeActivity.this).getIPAddress(), Integer.parseInt(Preference.instance(PayTypeActivity.this).getPost_IDs()), "gbk");
                    //初始化打印机
                    pos.initPos();
                    if (!TextUtils.isEmpty(objBean.getHead_img())){
                        pos.printLocation(1);
                        bitmap = pos.compressPic(returnBitMap(objBean.getHead_img()));
                        pos.draw2PxPoint(bitmap);
                    }
                    pos.printLocation(1);
                    pos.bold(true);
                    pos.printTabSpace(2);
                    pos.printWordSpace(1);
                    pos.printTextNewLine(objBean.getShop_name());

                    pos.printLocation(0);
                    pos.printTextNewLine("----------------------------------------------");
                    pos.bold(false);
                    pos.printTextNewLine("订 单 号:"+objBean.getSn());
                    pos.printTextNewLine("用 户 名:"+objBean.getMember());
                    pos.printTextNewLine("订单日期:"+objBean.getCreate_time());
                    pos.printTextNewLine("支付方式:"+objBean.getPay_way());
                    pos.printTextNewLine("订单折扣:"+objBean.getDiscount());
                    pos.printTextNewLine("订单备注:"+objBean.getRemarks());
                    pos.printLine(2);

                    pos.printText("货号          尺码    颜色    数量   小计");
                    pos.printLocation(20, 1);
                    pos.printTextNewLine("----------------------------------------------");

                    for (ParentBean foods : foodsBean) {
                        pos.printTextNewLine(foods.getGoods_name()+"          "+foods.getCode_number()+"     "+foods.getColour()+"      "+foods.getNum()+"      "+foods.getPay_back());
                        pos.printLocation(20, 1);
                    }

                    pos.printTextNewLine("----------------------------------------------");
                    pos.printLocation(0);
                    pos.printLine(1);
                    pos.printTextNewLine("订单总数:"+objBean.getNums());
                    pos.printTextNewLine("应收金额:"+objBean.getActual_pay());
                    pos.printTextNewLine("优惠金额:"+objBean.getDiscount_pay());
                    pos.printTextNewLine("实收金额:"+objBean.getPay());
                    pos.printLine(2);

//                    //打印二维码  -- 如果提供了二维码的地址则用该方法
//                    pos.qrCode(objBean.getQr_code());

                    //打印二维码的图片 -- 如果提供了二维码的截图则用该方法
                    if (!TextUtils.isEmpty(objBean.getQr_code())){
                        pos.printLocation(1);
                        Qbitmap = pos.compressPic(returnBitMap(objBean.getQr_code()));//url 转换为bitmap
                        pos.draw2PxPoint(Qbitmap);
                    }
                    //切纸
                    pos.feedAndCut();
                    pos.closeIOAndSocket();
                    pos = null;
                } catch (UnknownHostException e) {
                    e.printStackTrace();
                    showToast(e.toString());
                    Log.d("tag", "错误信息1:" + e.toString());
                } catch (IOException e) {
                    e.printStackTrace();
                    showToast(e.toString());
                    Log.d("tag", "错误信息2:" + e.toString());
                }
            }

        }.start();

    }

//将图片url转换为bitmap

    public Bitmap returnBitMap(String url) {
        URL myFileUrl = null;
        Bitmap bitmap = null;
        try {
            myFileUrl = new URL(url);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
        try {
            HttpURLConnection conn = (HttpURLConnection) myFileUrl.openConnection();
            conn.setDoInput(true);
            conn.connect();
            InputStream is = conn.getInputStream();
            bitmap = BitmapFactory.decodeStream(is);
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return bitmap;
    }
再来看看调用的工具类(蓝牙和WiFi共用一个,只是初始化方式不同)

import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Rect;

import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;

public class Pos {
    //定义编码方式
    private static String encoding = null;

    private Socket sock = null;
    // 通过socket流进行读写
    private OutputStream socketOut = null;
    private OutputStreamWriter writer = null;

    /**
     * 初始化Pos实例
     *
     * @param ip 打印机IP
     * @param port 打印机端口号
     * @param encoding 编码
     * @throws IOException
     */
    public Pos(String ip, int port, String encoding) throws IOException {
        sock = new Socket(ip, port);
        socketOut = new DataOutputStream(sock.getOutputStream());
        this.encoding = encoding;
        writer = new OutputStreamWriter(socketOut, encoding);
    }

    //蓝牙初始化
    public Pos(OutputStream outputStream, String encoding) throws IOException {
        writer = new OutputStreamWriter(outputStream, encoding);
        socketOut = outputStream;
        initPrinter();
    }

    public void print(byte[] bs) throws IOException {
        socketOut.write(bs);
    }

    public void printRawBytes(byte[] bytes) throws IOException {
        socketOut.write(bytes);
        socketOut.flush();
    }

    /**
     * 初始化打印机
     *
     * @throws IOException
     */
    public void initPrinter() throws IOException {
        socketOut.write(0x1B);
        socketOut.write(0x40);
        socketOut.flush();
    }
    /**
     * 关闭IO流和Socke

评论 45
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值