打碼機:掃碼,生成打印自定義標籤
打印機要支持,網絡、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實現掃一掃,閃光燈,生成二維碼圖片,解析二維碼(條碼)等功能