Printer

ICON
標(biāo)準ES-POS命令打印,固定IP或藍牙打印虏两,支持黑白圖片打印
預(yù)覽

Screenshots

打印樣例
要求
- minSdkVersion 5
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.BLUETOOTH" />
引用
dependencies {
?
compile 'am.util:printer:1.1.3'
?
}
詳情
- 繼承PrintTask來實現(xiàn)打印任務(wù)
- 繼承PrinterWriter來實現(xiàn)更多紙張類型的打印
- PrinterUtils包含了眾多打印指令
使用
- 添加藍牙權(quán)限
<uses-permission android:name="android.permission.BLUETOOTH" />
或者網(wǎng)絡(luò)請求權(quán)限<uses-permission android:name="android.permission.INTERNET" />
- 繼承PrintTask類愧旦,實現(xiàn)具體打印任務(wù):
private class TestPrintTask extends PrintTask {
public TestPrintTask(BluetoothDevice device, int type) {
super(device, type);
}
public TestPrintTask(String ip, int port, int type) {
super(ip, port, type);
}
@Override
protected void onPreExecute() {
super.onPreExecute();
//打印前的準備工作,比如顯示對話框
}
@Override
protected byte[] getPrintData(int type) throws Exception {
//實現(xiàn)打印數(shù)據(jù)的排版定罢,生成字節(jié)流
//根據(jù)不同的type創(chuàng)建不同的PrinterWriter笤虫,包內(nèi)提供PrinterWriter80mm和PrinterWriter58mm,對應(yīng)的是80mm小票打印機及58mm小票打印機祖凫。也可以自己創(chuàng)建PrinterWriter
PrinterWriter80mm printer = new PrinterWriter80mm();
printer.setAlignCenter();
printer.printDrawable(res, R.drawable.ic_printer_logo);
printer.setAlignLeft();
printer.printLine();
printer.printLineFeed();
printer.setLineHeight(80);
printer.print("最時尚的明星餐廳");
printer.printLineFeed();
printer.print("客服電話:400-8008800");
printer.printLineFeed();
...
printer.feedPaperCutPartial();
return printer.getData();
}
@Override
protected void onPrinterStateChanged(int state) {
super.onPrinterStateChanged(state);
//這些狀態(tài)的變更是在主線程內(nèi)
switch (state) {
case PrintRequest.STATE_0:
//生成打印頁面數(shù)據(jù)...
break;
case PrintRequest.STATE_1:
///生成數(shù)據(jù)成功琼蚯,開始創(chuàng)建Socket連接...
break;
case PrintRequest.STATE_2:
//創(chuàng)建Socket成功,開始發(fā)送測試數(shù)據(jù)...
break;
case PrintRequest.STATE_3:
//獲取輸出流成功惠况,開始寫入打印頁面數(shù)據(jù)...
break;
case PrintRequest.STATE_4:
//寫入打印頁面數(shù)據(jù)成功遭庶,正在完成打印...
break;
}
}
@Override
protected void onResult(int errorCode) {
super.onResult(errorCode);
switch (errorCode) {
case PrintRequest.ERROR_0:
//打印成功完成!
break;
case PrintRequest.ERROR_1:
//生成打印頁面數(shù)據(jù)失敵硗馈峦睡!
break;
case PrintRequest.ERROR_2:
//創(chuàng)建Socket失敗权埠!
break;
case PrintRequest.ERROR_3:
//獲取輸出流失斦チ恕!
break;
case PrintRequest.ERROR_4:
//寫入打印頁面數(shù)據(jù)失斎帘巍龙屉!
break;
case PrintRequest.ERROR_5:
//必要的參數(shù)不能為空!
break;
}
}
}
- 執(zhí)行打又韧:
new TestPrintTask(device, type).execute();
new TestPrintTask(ip, port, type).execute();
如果你要實現(xiàn)自己的打印機PrinterWriter叔扼,那么你需要繼承
public class PrinterWriter80mm extends PrinterWriter{
public static final int TYPE_80 = 80;// 紙寬80mm
public PrinterWriter80mm() throws IOException {
}
@Override
protected int getLineWidth() {
//一行能夠放下多少個“-”
return 24;
}
@Override
protected int getLineStringWidth(int textSize) {
//根據(jù)字體的大小事哭,一行可以放下多少個英文字符
switch (textSize) {
default:
case 0:
return 47;
case 1:
return 23;
}
}
@Override
protected int getDrawableMaxWidth() {
//圖片能夠全部打印在紙上的最大寬度
return 500;
}
}
注意
- 僅提供建立藍牙連接打印,不包括藍牙搜索及配對功能
- 不包含二維碼生成功能