Qt+TSC打印机调试

前言

最近被TSC打印机整的死去活来,记录一下使用方法。


一、环境

Qt5.15.2 + mingw + tsc TE244

二、使用步骤

1.引入库

从官网下载windows C++ SDK,引入库,以下是.pro文件

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使用

代码如下(示例):

头文件

#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文件

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

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Qter_Sean

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值