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

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



前言

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/ -lTSCLIB
INCLUDEPATH += $$PWD/
DEPENDPATH += $$PWD/

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

/*自己定义一个tsclib.h文件,在头文件中声明定义一个函数指针*/
#ifndef TSCLIB_H
#define TSCLIB_H
typedef _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成功打印图片问题的能多多交流,谢谢!第一次写博文,格式不怎么漂亮,敬请谅解。

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

猜你喜欢

转载自blog.csdn.net/qq_28643619/article/details/77915187