我有Zebra MZ 220打印机,我需要通过蓝牙从我的Android应用程序打印QR码。我能够打印文本和图像,但不能打印QR码。
我发现了这个:https://km.zebra.com/kb/index?page=content&id=SO7133&actp=LIST_POPULAR
所以,这是我的代码:
new Thread(new Runnable() {
public void run() {
try {
// Instantiate connection for given Bluetooth® MAC Address.
ZebraPrinterConnection thePrinterConn = new BluetoothPrinterConnection("XX:XX:XX:XX:XX:XX");
// Initialize
Looper.prepare();
// Open the connection - physical connection is established here.
thePrinterConn.open();
// SO THIS SHOULD PRINT THE QR CODE BUT DOESN'T :(
thePrinterConn.write("! 0 200 200 500 1\r\nB QR 10 100 M 2 U 10\r\nMA,QR code ABC123\r\nENDQR\r\nFORM\r\nPRINT".getBytes());
//Make sure the data got to the printer before closing the connection
Thread.sleep(500);
// Close the connection to release resources.
thePrinterConn.close();
Looper.myLooper().quit();
} catch (Exception e) {
// Handle communications error here
e.printStackTrace();
}
}
}).start();
它不会工作。所以......任何帮助都表示赞赏:)
答案 0 :(得分:5)
你似乎非常非常接近。在CPCL(RW的本机语言)中,所有命令都必须以新行和回车符结束。在您的代码中,这与每个CPCL命令之后的“\ r \ n”相关。看起来您忘记在CPCL链中输入最后的PRINT命令后输入“\ r \ n”。
希望此信息有助于将来,而不是切换到另一个框架。使用Zebra SDK将纯CPCL命令发送到打印机将具有明显更小的带宽,并且应该比生成QR条形码位图并将整个事件发送得更快。使用本机CPCL时,它甚至可以以更高的质量打印(因此更容易扫描)。而且您不必在应用程序中捆绑另一个JAR。
参考:CPCL手册(第2页第1页注释):http://www.zebra.com/content/dam/zebra/manuals/en-us/printer/cpcl-pm-en.pdf
答案 1 :(得分:0)
嗯......回答我自己的问题....:D
首先,我放弃尝试使用这种集成的Zebra东西并决定使用ZXing(“Zebra Crossing”)(http://code.google.com/p/zxing/)。 我找到了这个教程http://www.mysamplecode.com/2012/09/android-generate-qr-code-using-zxing.html并且能够成功。
首先我下载了ZXing并包含了'zxing-2.1>核心> core.jar'到我的项目。 我在上面的教程中添加了“GenerateQRCodeActivity.java”,“QRCodeEncoder.java”和“Contents.java”。
这是我的代码:
// Value for encoding
String encode_value = "http://www.google.com/";
// Size of the QR code
int qr_size = 200 * 3/4;
QRCodeEncoder qrCodeEncoder = new QRCodeEncoder(encode_value,
null,
Contents.Type.TEXT,
BarcodeFormat.QR_CODE.toString(),
qr_size);
// Get QR code as bitmap
final Bitmap bitmap = qrCodeEncoder.encodeAsBitmap();
new Thread(new Runnable() {
public void run() {
try {
// Instantiate connection for given Bluetooth® MAC Address.
ZebraPrinterConnection thePrinterConn = new BluetoothPrinterConnection("XX:XX:XX:XX:XX:XX");
// Initialize
Looper.prepare();
// Open the connection - physical connection is established here.
thePrinterConn.open();
// Print QR code
ZebraPrinter printer = ZebraPrinterFactory.getInstance(thePrinterConn);
printer.getGraphicsUtil().printImage(bitmap, 75, 0, 250, 250, false);
//Make sure the data got to the printer before closing the connection
Thread.sleep(500);
// Close the connection to release resources.
thePrinterConn.close();
Looper.myLooper().quit();
} catch (Exception e) {
// Handle communications error here
e.printStackTrace();
}
}
}).start();
所以,希望它有助于某人...