Печать QR-кода на принтере zebra с android
У меня есть принтер Zebra MZ 220, и мне нужно распечатать QR-код из моего приложения для android через bluetooth. Я могу печатать текст и изображения, но не 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 1rnB QR 10 100 M 2 U 10rnMA,QR code ABC123rnENDQRrnFORMrnPRINT".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();
Это не работает. Так.... любая помощь ценится:)
2 ответов:
Похоже, вы были очень, очень близки. В CPCL (родном языке RW) все команды должны заканчиваться как новой строкой, так и символом возврата каретки. В вашем коде это соотносится с "\r\n " после каждой команды CPCL. Похоже, вы забыли поставить "\r\n " после последней команды печати в цепочке CPCL.
Надеюсь, что эта информация поможет в будущем вместо переключения на другую структуру. Использование Zebra SDK для отправки чистых команд CPCL в принтер будет иметь значительно меньшую пропускную способность и должен печатать быстрее, чем создание растрового изображения QR-штрих-кода и отправка всего этого. Он может даже печатать с более высоким качеством (и, следовательно, легче сканировать) при использовании собственного CPCL. И вам не придется связывать еще одну банку в вашем приложении.
Ссылка: руководство по CPCL (раздел 2 стр. 1 Примечание): http://www.zebra.com/content/dam/zebra/manuals/en-us/printer/cpcl-pm-en.pdf
Хорошо... чтобы ответить на мой собственный вопрос.... :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 > core.баночки для моего проекта. Затем я добавил " GenerateQRCodeActivity.Ява', - QRCodeEncoder.java ' и ' содержание.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();
Comments