android 使用系統打印機服務,打印圖片,文本,以及自定義內容

 

打碼機:掃碼,生成打印自定義標籤  

打印機要支持,網絡、WiFi ;手機與打印機在同一網絡下才行,本文用WiFi連接 

打開系統打印服務: 設置--更多設置--打印--選擇默認打印服務(或者應用商城下載 Mopria Print Service  )--開啓

 

1、使用系統打印機打印圖片:

    /**系統打印機--打印圖片*/
    private void doPrintPictures(Bitmap bitmap) {
        PrintHelper photoPrinter = new PrintHelper(this);
        photoPrinter.setScaleMode(PrintHelper.SCALE_MODE_FIT);
//        Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.droids);              //本地圖片
        photoPrinter.printBitmap("droids.jpg - test print", bitmap);
    }

2、打印自定義標籤

將需要打印的內容,圖片,文字 通過水印方式添加入一張圖片中,再調用系統打印服務,打印出來

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == 1111) {
            if (data != null) {

                content = data.getStringExtra(Constant.CODED_CONTENT);
                Log.i("掃描結果爲:", content);

                scanFragment.onActivityResult(requestCode, resultCode, data);

                //生成的二維碼
                Bitmap bitmap = CodeCreator.createQRCode(content, 300, 300, null);

                if (bitmap != null) {
                    //將內容水印方式生成一張圖片
                    Bitmap waterMark = AddWatermark(bitmap);
                    contentIv.setImageBitmap(waterMark);
                    //保存入本地
                    QRCodeUtil.saveImageToGallery(getApplicationContext(), waterMark);
                    //打印 圖片
                    doPrintPictures(waterMark);

                }
            }
        }
    }

 3、AddWatermark

    /**
     * 添加水印
     *
     * @param mBitmap
     * @return mNewBitmap
     */
    private Bitmap AddWatermark(Bitmap mBitmap) {
        //獲取原始圖片與水印圖片的寬與高
        int mBitmapWidth = mBitmap.getWidth();
        int mBitmapHeight = mBitmap.getHeight();
        //定義底片 大小
        Bitmap mNewBitmap = Bitmap.createBitmap(800, 600, Bitmap.Config.ARGB_8888);
        //原始圖片--底片
        Canvas mCanvas = new Canvas(mNewBitmap);
        //向位圖中開始畫入MBitmap圖片 二維碼在底片中的位置
//        mCanvas.drawBitmap(mBitmap,0,0,null);
        mCanvas.drawBitmap(mBitmap, 80, 150, null);
        //添加文字
        Paint mPaint = new Paint();
        mPaint.setColor(Color.BLACK);
        mPaint.setTextSize(25);
        //true爲粗體,false爲非粗體
        mPaint.setFakeBoldText(true);


        //字體
        String mTitl = "Title";
        String mNam = "Name";
        String mP = "P:1234567";
        String mT = "T:2020061916";
        String mV = "V:23563";
        String mS = "S:1025698736125";
        String mMdae = "MADE  IN  CHINA";

        //根據底片大小--->水印的位置座標
        mCanvas.drawText(mTitl, 80, 130, mPaint);
        mCanvas.drawText(mNam, 400, 130, mPaint);
        mCanvas.drawText(mP, 400, (mBitmapHeight / 4) + 150, mPaint);
        mCanvas.drawText(mT, 400, (mBitmapHeight / 3) + 170, mPaint);
        mCanvas.drawText(mV, 400, (mBitmapHeight / 2) + 160, mPaint);
        mCanvas.drawText(mS, 400, (mBitmapHeight / 1) + 150, mPaint);
        mCanvas.drawText(mMdae, 100, 480, mPaint);
        mCanvas.save();
        mCanvas.restore();

        return mNewBitmap;
    }

4、系統打印:doPrintPictures

   /**
     * 系統打印機--打印圖片
     */
    private void doPrintPictures(Bitmap bitmap) {
        PrintHelper photoPrinter = new PrintHelper(this);
        photoPrinter.setScaleMode(PrintHelper.SCALE_MODE_FIT);
//        Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.droids);              //本地圖片
        photoPrinter.printBitmap("droids.jpg - test print", bitmap);
    }

5、保存圖片

    /**
     * 將二維碼圖片保存到文件夾
     *
     * @param context
     * @param bmp
     */
    public static void saveImageToGallery(Context context, Bitmap bmp) {
        // 首先保存圖片
        String externalStorageState = Environment.getExternalStorageState();
        //判斷sd卡是否掛載
        if (externalStorageState.equals(Environment.MEDIA_MOUNTED)) {
            /*外部存儲可用,則保存到外部存儲*/
            //創建一個文件夾
            File appDir = new File(Environment.getExternalStorageDirectory(), "Pictures");
            //如果文件夾不存在
            if (!appDir.exists()) {
                //則創建這個文件夾
                appDir.mkdir();
            }
            //將bitmap保存
            saveImage(context, bmp, appDir);
        } else {
            //外部不可用,將圖片保存到內部存儲中,獲取內部存儲文件目錄
            File filesDir = context.getFilesDir();
            //保存
            saveImage(context, bmp, filesDir);
        }
    }

    private static void saveImage(Context context, Bitmap bmp, File appDir) {
        //命名文件名稱
//          SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");// HH:mm:ss
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date = new Date(System.currentTimeMillis());
        String format = dateFormat.format(date);

        String fileName = format + ".jpg";
//        String fileName = "掃碼知內容" + ".jpg";
        //創建圖片文件,傳入文件夾和文件名
        File imagePath = new File(appDir, fileName);
        try {
            //創建文件輸出流,傳入圖片文件,用於輸入bitmap
            FileOutputStream fos = new FileOutputStream(imagePath);
            //將bitmap壓縮成png,並保存到相應的文件夾中
            bmp.compress(Bitmap.CompressFormat.PNG, 100, fos);
            //沖刷流
            fos.flush();
            //關閉流
            fos.close();

            Toast.makeText(context,"保存完畢",Toast.LENGTH_SHORT).show();

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        // 其次把文件插入到系統圖庫
        try {
            MediaStore.Images.Media.insertImage(context.getContentResolver(),
                    imagePath.getAbsolutePath(), fileName, null);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        // 最後通知圖庫更新
        context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + imagePath.getAbsolutePath())));
    }

 6、關於二維碼的生成參考文章:

Android超方便 集成 Zxing實現掃一掃,閃光燈,生成二維碼圖片,解析二維碼(條碼)等功能

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章