Printer

ICON
標準ES-POS命令打印,固定IP或藍牙打印,支持黑白圖片打印
預覽

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來實現打印任務
- 繼承PrinterWriter來實現更多紙張類型的打印
- PrinterUtils包含了眾多打印指令
使用
- 添加藍牙權限
<uses-permission android:name="android.permission.BLUETOOTH" />
或者網絡請求權限<uses-permission android:name="android.permission.INTERNET" />
- 繼承PrintTask類,實現具體打印任務:
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 {
//實現打印數據的排版,生成字節流
//根據不同的type創建不同的PrinterWriter,包內提供PrinterWriter80mm和PrinterWriter58mm,對應的是80mm小票打印機及58mm小票打印機。也可以自己創建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);
//這些狀態的變更是在主線程內
switch (state) {
case PrintRequest.STATE_0:
//生成打印頁面數據...
break;
case PrintRequest.STATE_1:
///生成數據成功,開始創建Socket連接...
break;
case PrintRequest.STATE_2:
//創建Socket成功,開始發送測試數據...
break;
case PrintRequest.STATE_3:
//獲取輸出流成功,開始寫入打印頁面數據...
break;
case PrintRequest.STATE_4:
//寫入打印頁面數據成功,正在完成打印...
break;
}
}
@Override
protected void onResult(int errorCode) {
super.onResult(errorCode);
switch (errorCode) {
case PrintRequest.ERROR_0:
//打印成功完成!
break;
case PrintRequest.ERROR_1:
//生成打印頁面數據失敗!
break;
case PrintRequest.ERROR_2:
//創建Socket失敗!
break;
case PrintRequest.ERROR_3:
//獲取輸出流失敗!
break;
case PrintRequest.ERROR_4:
//寫入打印頁面數據失敗!
break;
case PrintRequest.ERROR_5:
//必要的參數不能為空!
break;
}
}
}
- 執行打印:
new TestPrintTask(device, type).execute();
new TestPrintTask(ip, port, type).execute();
如果你要實現自己的打印機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) {
//根據字體的大小,一行可以放下多少個英文字符
switch (textSize) {
default:
case 0:
return 47;
case 1:
return 23;
}
}
@Override
protected int getDrawableMaxWidth() {
//圖片能夠全部打印在紙上的最大寬度
return 500;
}
}
注意
- 僅提供建立藍牙連接打印,不包括藍牙搜索及配對功能
- 不包含二維碼生成功能