访问宇宙 2023-05-15 15:56 采纳率: 80.4%
浏览 46
已结题

QT开发: 如何调用TSCLIB库打印本地图片?


QT开发: 如何调用TSCLIB库打印本地图片?

我已经完成了以下代码:
void MainWindow::on_pushButton_clicked()
{
    ui->pushButton->setText("TSC打印测试");
    typedef int (*TSCabout)();
    typedef int (*TSCopenport)(char*);
    typedef int (*TSCsendcommand)(char*);
    typedef int (*TSCcloseport)();
    typedef int (*TSCdownloadpcx)(char*, char*);

    QLibrary tscdll("C:\\TSCLIB.dll");
    if(tscdll.load())
    {
         TSCabout about = reinterpret_cast<TSCabout>(tscdll.resolve("about"));
         TSCopenport openport=reinterpret_cast<TSCopenport>(tscdll.resolve("openport"));
         TSCcloseport closeport=reinterpret_cast<TSCcloseport>(tscdll.resolve("closeport"));
         TSCsendcommand sendcommand=reinterpret_cast<TSCsendcommand>(tscdll.resolve("sendcommand"));
         TSCdownloadpcx downloadpcx = reinterpret_cast<TSCdownloadpcx>(tscdll.resolve("downloadpcx"));

         if(about == nullptr)
         {
             QMessageBox::warning(this, "Error", "Unable to resolve 'about' function");
             return;
         }
         else if(openport==nullptr)
         {
             QMessageBox::warning(this, "Error", "Unable to resolve 'openport' function");
             return;
         }
         else if(closeport==nullptr)
         {
             QMessageBox::warning(this, "Error", "Unable to resolve 'openport' function");
             return;
         }
         else if(sendcommand==nullptr)
         {
             QMessageBox::warning(this, "Error", "Unable to resolve 'openport' function");
             return;
         }
         else if(downloadpcx==nullptr)
         {
             QMessageBox::warning(this, "Error", "Unable to resolve 'downloadpcx' function");
             return;
         }

        char printerName[] = "TSC TTP-243 Pro";
        openport(printerName);
        sendcommand(const_cast<char*>("SIZE 50 mm, 50 mm"));
        sendcommand(const_cast<char*>("GAP 2 mm, 0 mm"));
        sendcommand(const_cast<char*>("DIRECTION 0"));
        sendcommand(const_cast<char*>("CLS"));

        // Download the image to the printer as a PCX file
        QString imagePath = "C:/Users/DELL/Desktop/QT_Sample/combined.png";
        QByteArray imageData;
        QFile imageFile(imagePath);
        if(imageFile.open(QIODevice::ReadOnly))
        {
            qDebug() << "Image file opened successfully";
            imageData = imageFile.readAll();
            imageFile.close();
        }
        else
        {
            qDebug() << "Failed to open image file at path" << imagePath;
            QMessageBox::warning(this, "Error", "Unable to open image file");
            closeport();
            return;
        }

        qDebug() << "Image data size: " << imageData.size();
        qDebug() << "PCX file path: " << "D:/combined.pcx";
        downloadpcx(const_cast<char*>("D:/combined.pcx"), imageData.data());

        // Print the image using the PCX file
        sendcommand(const_cast<char*>("PUTPCX 10,10,\"combined.pcx\""));
        sendcommand(const_cast<char*>("PRINT 1"));

        closeport();
    }
    else
    {
         QMessageBox::warning(this, "Error", tscdll.errorString());
    }
    return;
}

但是在运行到downloadpcx(const_cast<char*>("D:/combined.pcx"), imageData.data());时,就跳出弹窗:Could not open file.
如下如所示:

img

查看了相应路径下的文件,发现downloadpcx函数并没有成功把combined.png转为combined.pcx。 路径下根本没有这个pcx文件。
但是其他的功能都正常,如果只是打印文字,是可以调到TSC打印机打印的。
究竟如何才能用TSC打印PNG图片啊?!怎么解决Could not open file的问题啊?! 求大家指点!

  • 写回答

1条回答 默认 最新

  • 红色荷包蛋 2023-05-15 16:05
    关注

    如果对你有启发和帮助,请采纳! 答案参考Chatgpt解答
    根据你提供的代码和描述,问题可能出在以下几个地方:

    1. 文件路径问题:你在调用downloadpcx函数时,指定的PCX文件路径为"D:/combined.pcx",但是实际上你后续使用的路径是"C:/Users/DELL/Desktop/QT_Sample/combined.png"。请确保路径的一致性,确保PCX文件的保存路径和读取的PNG文件的路径是一致的。

    2. 文件读取问题:你使用QFile读取PNG文件的代码看起来是正确的,但是你需要确保能够成功读取到PNG文件的数据。你可以在QFile读取之后添加一些调试输出,例如打印imageData.size()的值,以确保数据已经正确读取。

    3. 文件写入问题:downloadpcx函数可能无法将PNG文件转换为PCX文件并保存在指定路径。请确保该函数能够正确执行,并且你有权限在指定路径上进行文件写入。你可以尝试在调用downloadpcx函数之前,手动创建一个空的PCX文件,然后将路径传递给downloadpcx函数,看看是否能够成功写入数据。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 5月17日
  • 创建了问题 5月15日

悬赏问题

  • ¥15 没输出运行不了什么问题
  • ¥20 输入import torch显示Intel MKL FATAL ERROR,系统驱动1%,: Cannot load mkl_intel_thread.dll.
  • ¥15 点云密度大则包围盒小
  • ¥15 nginx使用nfs进行服务器的数据共享
  • ¥15 C#i编程中so-ir-192编码的字符集转码UTF8问题
  • ¥15 51嵌入式入门按键小项目
  • ¥30 海外项目,如何降低Google Map接口费用?
  • ¥15 fluentmeshing
  • ¥15 手机/平板的浏览器里如何实现类似荧光笔的效果
  • ¥15 盘古气象大模型调用(python)