QT(Send raw data to printer)发送原始数据到USB打印机

本文介绍了如何使用QT通过Win32 API将原始数据发送到USB条码打印机,重点推荐使用Win32 API打印原始数据的方法。文中列举了6种方法,包括直接打印、映射LPT端口、使用ZPL语言、CUPs API、libusb-win32库以及Win32 API,并提供了详细的代码示例。
摘要由CSDN通过智能技术生成
QT(Send raw data to printer)发送原始数据到USB打印机


http://hi.baidu.com/ppacctv/blog/item/c9517538a35ef3d2b211c72f.html


    欢迎转载,敬请注明出处,如有疑问可以发邮件给我ppacctv@163.com,欢迎探讨,如果可以,也请把您的高招分享一下。谢谢!


    项目需要,在网上找了很久,能用的很少,试了很多方法,总结一下分享在这里,希望能给大家提供帮助。


    这里的打印机是条码打印机,因为第一次接触这种设备,所以买了斑马的GK888t型条码打印机,据说ZPL语言就是斑马的杰作想必支持会好点。实际是,除了ZPL本身外,没有SDK,也没有DDK,所以,一切就只能靠搜索引擎帮忙了,这里感谢百度和谷歌啦。


    写在开头:有些在网上找的内容忘了留网址,写该文时搜索相关内容补的网址,请原相关作者见谅。


粗略总结了6种方法,个人比较推荐第6第3种方法。如下:


1、直接打印(最简单)。
    条码打印机可以当做普通打印机使用。所以,你用记事本、word等等只要有打印功能的,都可以打印。所以该方法就是使用Qt绘制图片、path什么的,然后打印即可。


2、把USB打印机映射到LPT端口。
    参照:http://blog.sina.com.cn/s/blog_6d4dcdba0100xowi.html
    
    这里我在本机不需要安装“Microsoft Loopback Adapter”,而是使用如下的方法:(gk888t是我共享的打印机名)
    net use LPT2 \\127.0.0.1\gk888t


3、使用转意字符(需要ZPL语言,建议)。
    参照:http://stackoverflow.com/questions/4442122/send-raw-zpl-to-zebra-printer-via-usb
    
    一定要按上文方法设置转意字符。代码如下,不再阐述。


    QPrinter printer(QPrinter::PrinterResolution);
    QPrintDialog *dlg = new QPrintDialog(&printer, this);


    if (dlg->exec() == QDialog::Accepted)
    {
        QPainter p(&printer);
        p.drawText(0,0,"${^XA^FO10,100^BY3^BCN,100,Y,N,N^FDDC123456^FS^XZ}$");
…………
    }


4、使用CUPs API(未完成)。
    参照:http://stackoverflow.com/questions/5558248/qt-print-raw-text


    粗试文中的方法,当时链接库没搞好,所以放弃了。


5、使用libusb-win32(可以)。
    参照:http://sourceforge.net/apps/trac/libusb-win32/wiki
         http://www.4ucode.com/Study/Topic/617136


    特别声明:如果你和我一样是菜鸟,请注意,最好在试验该方法时在虚拟机内进行,不然,系统USB设备可能会统统罢工的。
    参照testlibusb.c例程,这里贴一下打印的代码:


    别忘了在.pro文件添加
    LIBS += ./libusb.a
    这里我把libusb.a和源代码放在了一起,还有lusb0_usb.h头文件不要忘了,……


    udev = usb_open(dev);
    if (udev)
    {
    char *sb = "^XA^FO10,100^BY3^BCN,100,Y,N,N^FDDAe123456^FS^XZ";
    int ok = usb_claim_interface(udev,0);
    printf("%d\n",ok);
    ok = usb_bulk_write(udev,0x01,sb,50,1000);
    printf("%d\n",ok);
    …………


    但这里有个问题,一直没有搞定使用libusb同时又使用系统的打印机驱动模式,也就是说,在该模式下,无法使用打印服务访问打印机,不再支持直接打印。
    这个不知是我的设置问题还是什么。折腾的时候发现,使用一种方法可以一起使用,但一旦系统重启就不再可以,同时,打印服务以及rpc服务均不正常,需要使用斑马自带的打印机安装程序重新安装,系统才能回复正常,但一重启依旧。




6、使用Win32 API打印原始数据(强烈建议)。
    这可是微软的方法啊,不用在系统添加任何文件,同时又能保证打印机的正常使用,所以强烈建议。
    参照:http://support.microsoft.com/kb/138594


    在.pro文件添加
    LIBS += D:\Qt\qtcreator-2.4.1\mingw\lib\libwi
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值