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

相关推荐
源代码•宸1 分钟前
Leetcode—1266. 访问所有点的最小时间【简单】
开发语言·后端·算法·leetcode·职场和发展·golang
遇见~未来4 分钟前
JavaScript数组全解析:从本质到高级技巧
开发语言·前端·javascript
南屿欣风5 分钟前
Sentinel 熔断规则 - 异常比例(order & product 示例)笔记
java·开发语言
u01040583612 分钟前
使用Java实现高性能的异步编程:CompletableFuture与Reactive Streams
java·开发语言
朔北之忘 Clancy19 分钟前
2020 年 6 月青少年软编等考 C 语言二级真题解析
c语言·开发语言·c++·学习·青少年编程·题解·尺取法
消失的旧时光-194324 分钟前
C++ 中的 auto 与 nullptr:不是语法糖,而是类型系统升级
开发语言·c++
专注VB编程开发20年25 分钟前
c#Type数组转成字符串的名称
java·开发语言
编程饭碗37 分钟前
【多线程编程】
java·开发语言
vyuvyucd1 小时前
Python虚拟环境终极指南:venv到uv进阶
开发语言·python·uv
Tim_101 小时前
【C++入门】05、复合类型-数组
开发语言·c++·算法