前言
最近被TSC打印机整的死去活来,记录一下使用方法。
一、环境
Qt5.15.2 + mingw + tsc TE244
二、使用步骤
1.引入库
从官网下载windows C++ SDK,引入库,以下是.pro文件
c++
QT += core gui printsupport
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += c++17
# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES += \
main.cpp \
mainwindow.cpp
HEADERS += \
mainwindow.h
FORMS += \
mainwindow.ui
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
win32: LIBS += -L$$PWD/TSCDLL_20240124/x64/ -lTSCLIB
INCLUDEPATH += $$PWD/TSCDLL_20240124/x64
DEPENDPATH += $$PWD/TSCDLL_20240124/x64
2.demo使用
代码如下(示例):
头文件
c++
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QLibrary>
#include <QMainWindow>
typedef int (*TSCabout)();
typedef int (*TSCopenport)(const char *);
typedef int (*TSCsendcommand)(const char *);
typedef int (*TSCcloseport)();
typedef int (*TSCwindowsfont)(int a, int b, int c, int d, int e, int f,
unsigned char *g, unsigned char *h);
typedef int (*Downloadpcx)(char *a, char *b);
QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE
class MainWindow : public QMainWindow {
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void on_btn_barcode_clicked();
void on_btn_qrcode_clicked();
void on_btn_font_clicked();
private:
Ui::MainWindow *ui;
QLibrary tscdll;
TSCabout about;
TSCopenport openport;
TSCcloseport closeport;
TSCsendcommand sendcommand;
TSCwindowsfont tscwindowsfont;
Downloadpcx downloadpcx;
};
#endif // MAINWINDOW_H
cpp文件
c++
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent), ui(new Ui::MainWindow), tscdll("TSCLIB.dll") {
ui->setupUi(this);
about = (TSCabout)tscdll.resolve("about");
openport = (TSCopenport)tscdll.resolve("openport");
closeport = (TSCcloseport)tscdll.resolve("closeport");
sendcommand = (TSCsendcommand)tscdll.resolve("sendcommand");
tscwindowsfont = (TSCwindowsfont)tscdll.resolve("windowsfont");
downloadpcx = (Downloadpcx)tscdll.resolve("downloadpcx");
}
MainWindow::~MainWindow() { delete ui; }
void MainWindow::on_btn_barcode_clicked() {
if (!tscdll.load()) {
qDebug() << "加载DLL失败!";
}
QString text = ui->lE_barcode->text();
/*
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:字符串类型,条码内容。
*/
QString barCodeCMD =
QString("BARCODE %1,%2,\"128\",30,0,0,1,1,\"%3\"")
.arg(QString::number(100), QString::number(100), text);
// 设置打印机型号
openport("TSC TE244");
// 设置标签纸大小
sendcommand("SIZE 65 mm, 120 mm");
// 设置打印方向
sendcommand("DIRECTION 1");
// 清空打印机缓存
sendcommand("CLS");
// 打印条形码
sendcommand(barCodeCMD.toLocal8Bit().data());
sendcommand("PRINT 1");
closeport();
}
void MainWindow::on_btn_qrcode_clicked() {
if (!tscdll.load()) {
qDebug() << "加载DLL失败!";
}
QString text = ui->lE_qrcode->text();
/*
qrcode(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:字符串类型,错误纠正能力等级。 L-7%,M-15%,Q-25%,H-30%
d:字符串类型,设定条码高度,高度以点来表示。1~10(单位dot)
e:字符串类型,自动生成编码/手动生成编码。A-自动(建议使用),M-手动
f:字符串类型,设定条码顺时针旋转角度。0-旋转0°,90-顺时针旋转90°,180-顺时针旋转180°,270-顺时针旋转270°。
g:字符串类型,条码内容。
*/
QString qrCodeCMD =
QString("QRCODE %1,%2,H,6,A,270,\"%3\"")
.arg(QString::number(200), QString::number(200), text);
// 设置打印机型号
openport("TSC TE244");
// 设置标签纸大小
sendcommand("SIZE 65 mm, 120 mm");
// 设置打印方向
sendcommand("DIRECTION 1");
// 清空打印机缓存
sendcommand("CLS");
// 打印条形码
sendcommand(qrCodeCMD.toLocal8Bit().data());
sendcommand("PRINT 1");
closeport();
}
void MainWindow::on_btn_font_clicked() {
if (!tscdll.load()) {
qDebug() << "加载DLL失败!";
}
QString text = ui->lE_font->text();
// 设置打印机型号
openport("TSC TE244");
// 设置标签纸大小
sendcommand("SIZE 65 mm, 120 mm");
// 设置打印方向
sendcommand("DIRECTION 1");
// 清空打印机缓存
sendcommand("CLS");
// 打印条形码
/*
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:字符串类型,打印文字内容。
*/
tscwindowsfont(16, 64, 20, 0, 2, 0, (unsigned char *)"Arial",
(unsigned char *)text.toLocal8Bit().data());
sendcommand("PRINT 1");
closeport();
}
最大的问题就是乱码了,使用windowsfont 方式,不要使用 TEXT 指令的方式。
Demo链接:https://download.csdn.net/download/yonug1107716573/89626802
总结
以上就是今天要讲的内容,本文仅仅简单介绍了TSC的主要的使用,而TSC提供了大量能使我们快速便捷地处理数据的函数和方法。打印BMP图片的方式还没有测试。另外旋转条码打印出来可能有点模糊,调整打印机的浓度为1就行了。