6

我正在尝试将标签从 Android 应用程序打印到 Zebra 打印机(iMZ 320),但它似乎不理解我的命令行。

当我尝试这个示例代码时,当我将所有命令发送到打印机时,打印机会将它们打印到纸上:

zebraPrinterConnection.write("^XA^FO50,50^ADN,36,20^FDHELLO^FS^XZ".getBytes());

我已经阅读了 Zebra 官方网站上的 ZPL 编程教程,但我无法弄清楚如何使用 ZPL 命令使我的打印机正常工作。

4

2 回答 2

6

Zebra iMZ 可能以行打印模式发货。这意味着它不会解析和解释您提供的 ZPL 命令,而是打印它们。您需要将打印机配置为 ZPL 模式而不是行打印模式。以下命令应该这样做:

!U1 setvar "device.languages" "zpl"

注意:在某些情况下,您可能必须将语言设置为“hybrid_xml_zpl”而不仅仅是“zpl”

请注意,您需要在此命令的末尾包含一个换行符(或回车符)。您可以使用 Zebra Setup Utilities 通过其“通信”视角直接向打印机发送命令,点击主屏幕上的“通信”按钮即可使用。

Zebra 设置实用程序:http ://www.zebra.com/us/en/products-services/software/manage-software/zebra-setup-utility.html

ZPL 手册第 705 页(详细命令,例如上面列出的命令): https: //support.zebra.com/cpws/docs/zpl/zpl_manual.pdf

于 2013-04-20T14:11:24.163 回答
1

如果您想打印简单的文本,您可以通过 BT 插座将正常的“原始”数据发送到 Zebra 打印机,它会打印出来!您不需要使用 Zebra 打印库。

只需在异步任务中运行此代码即可打印两行纯文本:

protected Object doInBackground(Object... params) {
    //bt address
    String bt_printer = "00:22:58:31:85:68";
    String print_this = "Hello Zebra!\rThis is second line";
    //vars
    BluetoothSocket socket = null;
    BufferedReader in = null;
    BufferedWriter out = null;
    //device from address
    BluetoothDevice hxm = BluetoothAdapter.getDefaultAdapter().getRemoteDevice(bt_printer);
    UUID applicationUUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
    try {
        //create & connect to BT socket
        socket = hxm.createRfcommSocketToServiceRecord(applicationUUID);
        socket.connect();
        in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
        out.write(print_this);
        out.flush();
        //some waiting
        Thread.sleep(3000);
        //in - nothing, just wait to close connection
        in.ready();
        in.skip(0);
        //close all
        in.close();
        socket.close();
        out.close();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }       
    return null;
}
于 2013-04-18T16:43:53.673 回答