5

我有 Zebra MZ 220 打印机,我需要通过蓝牙从我的 android 应用程序打印 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();

它不起作用。所以....任何帮助表示赞赏:)

4

2 回答 2

7

你似乎已经非常非常接近了。在 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

于 2013-04-28T23:41:31.900 回答
1

好吧......回答我自己的问题......: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.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();

所以,希望它可以帮助某人......

于 2013-04-26T17:41:19.237 回答