Qt+TSC打印机调试

前言

最近被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就行了。

相关推荐
小牛itbull9 分钟前
ReactPress vs VuePress vs WordPress
开发语言·javascript·reactpress
请叫我欧皇i18 分钟前
html本地离线引入vant和vue2(详细步骤)
开发语言·前端·javascript
闲暇部落20 分钟前
‌Kotlin中的?.和!!主要区别
android·开发语言·kotlin
GIS瞧葩菜30 分钟前
局部修改3dtiles子模型的位置。
开发语言·javascript·ecmascript
chnming198734 分钟前
STL关联式容器之set
开发语言·c++
熬夜学编程的小王1 小时前
【C++篇】深度解析 C++ List 容器:底层设计与实现揭秘
开发语言·数据结构·c++·stl·list
GIS 数据栈1 小时前
每日一书 《基于ArcGIS的Python编程秘笈》
开发语言·python·arcgis
Mr.131 小时前
什么是 C++ 中的初始化列表?它的作用是什么?初始化列表和在构造函数体内赋值有什么区别?
开发语言·c++
陌小呆^O^1 小时前
Cmakelist.txt之win-c-udp-server
c语言·开发语言·udp
Gu Gu Study1 小时前
枚举与lambda表达式,枚举实现单例模式为什么是安全的,lambda表达式与函数式接口的小九九~
java·开发语言