我有一个应用程序,可以使用Rongta RRP-200移动打印机打印一些文本,通过蓝牙与我的手机连接。
为此,我使用这个插件:https://github.com/srehanuddin/Cordova-Plugin-Bluetooth-Printer
我可以将我的设备连接到打印机,甚至可以从我的应用程序运行打印功能,这会返回一条消息,通知我数据已发送。但是,打印机不执行任何操作(除了指示灯亮起之外)。
这是尝试打印我的文本的功能(来自插件):
boolean printText(CallbackContext callbackContext, String msg) throws IOException {
try {
mmOutputStream.write(msg.getBytes());
// tell the user data were sent
//Log.d(LOG_TAG, "Data Sent");
callbackContext.success("Data Sent");
return true;
} catch (Exception e) {
String errMsg = e.getMessage();
Log.e(LOG_TAG, errMsg);
e.printStackTrace();
callbackContext.error(errMsg);
}
return false;
}
这里可能出什么问题?
发现插件工作正常,但是你必须给打印机完整的一行才能让它打印一些东西。因此,请在字符串末尾添加
\n
。这是打印某些内容的功能,以防有人需要它(在 Ionic 应用程序控制器中):
$scope.print = function(text) {
BTPrinter.connect(function(data){
BTPrinter.printText(function(data){
BTPrinter.disconnect(function(){},function(err){
console.log("Error");
console.log(err)
}, "Your Printer device")
}, function(err){
console.log("Error");
console.log(err)
}, text + "\n")
}, function(err){
console.log("Error");
console.log(err)
}, "Your Printer device");
}
我有同样的打印机并编写了一个小插件,它对我来说非常棒。我在RPP200和RPP300上测试过。
https://github.com/CXRom/cordova-plugin-rpp
Rpp.Connect("00:0E:0E:0B:7B:93", // <-- MAC Address of the printer
function(print) {
//At this point we send the action but we need to wait until the connection
console.log(`connect ok ${JSON.stringify(print)}`);
},
function (err){
console.log(`connect err ${JSON.stringify(err)}`);
});
//Ask is device is connected
Rpp.IsConnected(function(conn) {
//Send to print
Rpp.Print({
marginTop: 10, //Margin before print
marginBottom: 10, //Margin after print
lineSpacing: 50, //Size of line
lines: [ //Lines to print
{ text: "Title", align: 1, bold: true, underline: true, size: 17 }, //long name properties
{ text: "Subtitle", a: 1, b: true, u: true, s: 17 }, //short name properties
{ text: "normal line" },
{ text: ":)", h: true }
]
}, function(res) {
console.log(`print ok ${JSON.stringify(res)}`);
}, function(err){
console.log(`print err ${JSON.stringify(err)}`);
});
}, function(err) {
});
不确定这是否仍然有必要,但请尝试 TruewindIT 的 Cordova-Bluetooth-Printer-Plugin。
{
"version": "1.0.0",
"name": "Cordova-Bluetooth-Printer-Plugin",
"cordova_name": "Cordova Bluetooth Printer Plugin",
"license": "MIT License",
"author": "Truewind IT",
"platforms": [ "android"],
"repository": {
"type": "git",
"url": "git+https://github.com/TruewindIT/Cordova-Bluetooth-Printer-Plugin.git"
}
}
$("#console")
只是一个用于在我的 Android 应用程序中打印状态的文本区域标记
$("#deviceList")
是一个 ul 标签,其中包含已连接设备的列表
列出已连接的设备:
BTPrinter.list(function(success){
$("#console").append("Success");
$("#console").append("::"+JSON.stringify(success, null, 2)+"::");
success.forEach((e) => {
$("#deviceList").append(`<li value="${e}">${e}</li>`)
});
},function(err){
$("#console").append("Error\n");
$("#console").append(JSON.stringify(err, null, 2))
})
连接并打印
注意:
BTPrinter.print()
是正确的方法,而不是基于BTPrinter.printText()
的
BluetoothPrinter.java
$('#deviceList').on('click', 'li', function () {
var deviceId = $(this).val();
var deviceName = $(this).text();
BTPrinter.connect(function(data){
$("#console").append("Connect Success\n");
$("#console").append(JSON.stringify(data, null, 2)+"\n")
BTPrinter.print(function(data){
$("#console").append("Printing Success:\n");
$("#console").append(JSON.stringify(data, null, 2)+"\n");
BTPrinter.disconnect(function(){
$("#console").append("Disconnect Success:\n");
},function(err){
$("#console").append("Disconnect Error");
}, deviceName)
},function(err){
$("#console").append("Failed in Printing:\n")
$("#console").append(JSON.stringify(err, null, 2)+"\n")
}, "Hello world text.\n\n\n\n")
},function(err){
$("#console").append("Connect Error\n");
$("#console").append(JSON.stringify(err, null, 2)+"\n")
}, deviceName)
// Attempt to connect to the selected device
});
cordova-bluetooth-printer-plugin/src/android/BluetoothPrinter.java
121 号线
else if( action.equals("print") )
{
try
{
String msg = args.getString(0);
print(callbackContext, msg);
}
catch( IOException e )
{
Log.e(LOG_TAG, e.getMessage());
e.printStackTrace();
}
return true;
}