QT + TSC条码打印机 打印相应的产品条码标签

来源:互联网 发布:日本人相互的称呼知乎 编辑:程序博客网 时间:2024/05/20 01:34

QT + TSC条码打印机 打印相应的产品条码标签


  • QT TSC条码打印机 打印相应的产品条码标签
    • 前言
      • QT调用TSCLIBDLL库操作技巧与步骤
      • 调用库时出现出现运行应用程序奔溃的解决办法


前言

TSC条码打印机Windows DLL函数库是TSC官方提供的动态链接库,里面包含了TSC条码打印机的一些基本函数供我们调用。在使用TSC Windows DLL(TSCLIB.DLL)前,安装该TSC条码打印机驱动程序(TSC驱动程序下载地址

:http://www.chongshang.com.cn/news/view.asp?id=199)。
TSC动态库中的函数说明可以参考一下资料:
http://www.chongshang.com.cn/news/view.asp?id=542
https://wenku.baidu.com/view/095ad90c25c52cc58bd6be88.html


1. QT调用TSCLIB.DLL库操作技巧与步骤

1)将TSCLIB.dll文件放到QT工程文件所在的目录下,由于官方只提供了.DLL文件,所以QT调用时需要采用显示调用的方法。

在app.pro配置文件中添加包含库文件的路径

unix|win32: LIBS += -L$$PWD/ -lTSCLIBINCLUDEPATH += $$PWD/DEPENDPATH += $$PWD/

由于没有头文件,QT显示调用外部库中的函数接口需要用到QLibrary类,调用方法如下:

/*自己定义一个tsclib.h文件,在头文件中声明定义一个函数指针*/#ifndef TSCLIB_H#define TSCLIB_Htypedef _stdcall int (*About)();   //显示DLL版本号码typedef _stdcall void (*Openport)(unsigned char*); //指定电脑端的输出口typedef _stdcall void (*Closeport)();               //关闭指定的电脑端输出口/*说明:设定标签的宽度、高度、打印速度、打印浓度、感应器类别、Gap/Black mark垂直间距、Gap/Black mark偏移距离参数:a:字符串类型,设定标签宽度,单位mm。b:字符串类型,设定标签高度,单位mm。c:字符串类型,设定打印速度(打印速度随机型不同而有不同的选项),1.0-每秒1.0英寸打印速度,1.5-每秒1.5英寸打印速度,    2.0-每秒2.0英寸打印速度,3.0-每秒3.0英寸打印速度,4.0-每秒4.0英寸打印速度,6.0-每秒6.0英寸打印速度,    8.0-每秒8.0英寸打印速度,10.0-每秒10.0英寸打印速度。d:字符串类型,设定打印浓度,0-15,数字越大打印结果越黑。e:字符串类型,设定使用感应器类别,0-表示垂直间距感测器(Gap),1-表示使用黑标感测器。f:字符串类型,设定Gap/Black mark垂直间距高度,单位mm。g:字符串类型,设定Gap/Black mark偏移距离,单位mm,此参数若使用一般标签时均设为0。*/typedef _stdcall int (*Setup)(unsigned char *a,unsigned char *b,unsigned char *c,unsigned char *d,unsigned char *e,unsigned char *f,unsigned char *g);                   ///*说明:清除*/typedef _stdcall void (*ClearBuffer)();/*5、barcode(a,b,c,d,e,f,g,h,i)说明:使用条码机内部条码打印。参数:a:字符串类型,条码X方向起始点,以点(point)表示。200dpi-1点=1/8mm,300dpi-1点=1/12mm,600dpi-1点=1/24mm。b:字符串类型,条码Y方向起始点,以点(point)表示。200dpi-1点=1/8mm,300dpi-1点=1/12mm,600dpi-1点=1/24mm。c:字符串类型,128:Code128,字符集A/B/C自动转换;128M,Code128,字符集A/B/C手动转换;EAN128,字符集A/B/C自动转换;25:交叉25码;25C:带校验位的交叉25码;39:Code39;39C:带校验位的Code39码;93:Code93;EAN13:EAN13;EAN13+2:带2个增位的EAN13;EAN13+5:带5个增位的EAN-13;EAN8:EAN8;EAN8+2:带2个增位的EAN8;EAN8+5:带5个增位的EAN8;CODA:库德巴码;POST:Postnet;UPCA:UPC-A;UPCA+2:带2个增位的UPC-A;UPCA+5:带5个增位的UPC-A;UPCE:UPC-E;UPCE+2:带2个增位的UPC-E;UPCE+5:带5个增位的UPC-E。d:字符串类型,设定条码高度,高度以点来表示。e:字符串类型,设定是否打印条码下面的文字,0-不打印文字,1-打印文字。f:字符串类型,设定条码旋转角度。0-旋转0°,90-旋转90°,180-旋转180°,270-旋转270°。g:字符串类型,设定条码窄Bar比例因子。h:字符串类型,设定条码宽Bar比例因子。i:字符串类型,条码内容。*/typedef _stdcall void (*Barcode)(QString, QString, QString, QString, QString, QString, QString, QString, QString);                   ///*6、printerfont(a,b,c,d,e,f,g)说明:使用条码机内部字体打印。参数:a:字符串类型,文字X方向起始点,以点表示200dpi-1点=1/8mm,300dpi-1点=1/12mm,600dpi-1点=1/24mm。b:字符串类型,文字Y方向起始点,以点表示200dpi-1点=1/8mm,300dpi-1点=1/12mm,600dpi-1点=1/24mm。c:字符串类型,内建字体名称,共12种。1:8*12dots;2:12*20dots;3:16*24dots;4:24*32dots;5:32*48dots;TST24.BF2:繁体中文24*24;TST16.BF2:繁体中文16*16;TTT24.BF2:繁体中文24*24;TSS24.BF2:简体中文24*24;TSS16.BF2:简体中文16*16;K:韩文24*24;L:韩文16*16。d:字符串类型,设定文字旋转角度。0-旋转0°,90-旋转90°,180-旋转180°,270-旋转270°。e:字符串类型,设定文字X方向放大倍率,1-8。f:字符串类型,设定文字Y方向放大倍率,1-8。g:字符串类型,打印文字内容。*/typedef _stdcall int (*Printerfont)(unsigned char *a,unsigned char *b,unsigned char *c,unsigned char *d,unsigned char *e,unsigned char *f,unsigned char *g);                   ///*7、sendcommand(command)说明:送内建指令到条码打印机。参数:详细指令参见TSPL。*/typedef _stdcall int (*Sendcommand)(unsigned char *);/*8、printlabel(a,b)说明:打印标签内容参数:a:字符串类型,设定打印标签式数。(set)b:字符串类型,设定打印标签份数(copy)*/typedef _stdcall int (*Printlabel)(unsigned char *,unsigned char *);/*9、downloadpcx(a,b)说明:下载单色PCX格式图档到打印机。参数:a:字符串类型,图档名(可包含路径)。b:字符串类型,下载至打印机记忆体内的名称。*/typedef _stdcall int (*Downloadpcx)(unsigned char *,unsigned char *);/*10、formfeed()说明:跳页,该函数需在setup后使用。参数:无*/typedef _stdcall void (*Formfeed)();/*11、nobackfeed()说明:设定纸张不回吐。参数:无*/typedef _stdcall void (*Nobackfeed)();/*12、windowsfont(a,b,c,d,e,f,g,h)说明:使用Windows TTF字体打印文字。参数:a:整数类型,文字X方向起始点,以点表示。b:整数类型,文字Y方向起始点,以点表示。c:整数类型,字体高度,以点表示。d:整数类型,旋转角度,逆时针方向旋转。0-旋转0°,90-旋转90°,180-旋转180°,270-旋转270°。e:整数类型,字体外形。0:标签;1:斜体;2:粗体;3:粗斜体。f:整数类型,下划线,0:无下划线;1:加下划线。g:字符串类型,字体名称。如:Arial,Times new Roman。h:字符串类型,打印文字内容。*/typedef _stdcall int (*Windowsfont)(int a,int b,int c,int d,int e,int f,unsigned char *g,unsigned char *h);                   //#endif // TSCLIB_H----------//声明函数About about=(About)mytsclib.resolve("about");Openport openport = (Openport)mytsclib.resolve("openport");Setup setup = (Setup)mytsclib.resolve("setup");ClearBuffer clearbuffer = (ClearBuffer)mytsclib.resolve("clearbuffer");Downloadpcx downloadpcx = (Downloadpcx)mytsclib.resolve("downloadpcx");Sendcommand sendcommand = (Sendcommand)mytsclib.resolve("sendcommand");Windowsfont windowsfont = (Windowsfont)mytsclib.resolve("windowsfont");Printlabel printlabel = (Printlabel)mytsclib.resolve("printlabel");Closeport closeport = (Closeport)mytsclib.resolve("closeport");/*在调用的地方使用以下代码调用*/QLibrary mytsclib("TSCLIB.dll");if (mytsclib.load()) //判断是否正确加载{      qDebug() << "printer";//      about();      QString portstr = ui->comboBox_Printer->currentText(); //QString转char *      QByteArray portStr = portstr.toLatin1();      openport((unsigned  char*)(portStr.data()));//"TSC TTP-244 Pro"      setup((unsigned  char*)"60",(unsigned  char*)"40",(unsigned  char*)"3",            (unsigned  char*)"15",(unsigned  char*)"0",(unsigned  char*)"0",(unsigned  char*)"0");      clearbuffer();//      downloadpcx((unsigned char*)"C:UL.PCX",(unsigned char*)"UL.PCX");//      windowsfont(10, 250, 80, 0, 0,0, (unsigned char*)"标楷体", (unsigned char*)"标楷体字型");      char mybarCodeCMD[128] = {0};      QString barCodeStr =/*"0FFF5135"; //*/ui->label_deviceNum->text(); //QString转char *   toUpper()      QByteArray resultBarCodeStr = barCodeStr.toUpper().toLatin1();      sprintf(mybarCodeCMD,"BARCODE 236,140,\"128\",50,1,0,2,4,\"%s\"",resultBarCodeStr.data());      sendcommand((unsigned char *)mybarCodeCMD);      /*         2.固定文字打印指令 中文      */      sendcommand((unsigned char *)"PUTBMP 320,72,CCC.BMP");      windowsfont(16, 16, 40, 0, 2, 1, (unsigned char*)"微软雅黑", (unsigned char *)myLogoGBK); //产品logo      windowsfont(16, 64, 20, 0, 2, 0, (unsigned char*)"微软雅黑", (unsigned char *)myText1GBK);//产品型号//      sendcommand((unsigned char *)"PUTPCX 320,72,\"CCC.PCX\"");      printlabel((unsigned char*)"1", (unsigned char*)"1");      closeport();      mytsclib.unload();}

在定义函数指针时用到了_stdcall 修饰符,之前没有用这个修饰,应用程序运行时老崩溃,加了这个后就没有问题了。如果想深入了解_stdcall 的用法,可以自行百度。应用中调用库函数绘制pcx图片时没打印出效果,我研究了好久,依然没找到解决办法,bmp格式的图片也试过,没打印出来,所以暂时不支持图片打印。

2.调用库时出现出现运行应用程序奔溃的解决办法

除了在函数定义时要加_stdcall,而且TSCLIB.DLL在Windows下运行需要依赖系统带的库文件,如果缺少相应的库文件,也会导致执行库中函数时程序崩溃。一般的我们查看一个库文件的依赖关系需要用到一些工具,这里我用的是 :Depends,
https://pan.baidu.com/s/1geWLGif 可以在这里下载使用,打开界面如图:

这里写图片描述

如果在库依赖查看器中看到有缺少的依赖库文件,可以在网上下载缺少的.dll文件,并将文件添加到电脑的C:\Windows\System32目录下,同时也添加到QT的工程文件所在的目录下即可,便于以后脱机运行时好找到需要的库文件。

动态链接库的调用还可以参考http://blog.csdn.net/roman1232008/article/details/17074371 希望对后来者有一定的启发,也请有同学解决了TSC成功打印图片问题的能多多交流,谢谢!第一次写博文,格式不怎么漂亮,敬请谅解。

打印效果如图:
这里写图片描述