qt+zint實現打印一維條形碼

1.需求

需要將小票號打印成條形碼,退換貨時通過掃描槍直接掃描不用人工輸入進行退貨和換貨,加快速度

2.實現

這裏通過zint生成條形碼圖片,通過qt將圖片繪製到打印紙上實現,也可以直接在打印紙上進行繪製線條,因人而異

3.代碼片段

打印小票號
void mytestimage::printBarcode(const QString &strTitle)
{
    //打印部分
    //這裏先生成圖片
    QString strImagePath("");
    strImagePath = QCoreApplication::applicationDirPath() + "//test.png";
    struct zint_symbol * my_symbol = ZBarcode_Create();
    my_symbol->symbology = BARCODE_CODE93;//BARCODE_CODE11;
    strcpy(my_symbol->outfile, strImagePath.toLocal8Bit().toStdString().c_str());
    ZBarcode_Encode(my_symbol, (unsigned char*)strTitle.toLocal8Bit().toStdString().c_str(), 0);
    ZBarcode_Print(my_symbol, 0); 
    ZBarcode_Delete(my_symbol);
    //繪製
    QPrinter printer;
    QPrintDialog printdialog(&printer, this);
    if (printdialog.exec())
    {
        //這裏我如何保證不進行拉伸呢
        //QString strname = printer.printerName();
        int dpi = printer.logicalDpiX();
        int nmm = printer.paperRect(QPrinter::Millimeter).width();
        int width = std::min(nmm, 80)*(dpi*1.0/25.4);     //這裏選擇80mm紙張
        QPainter painter(&printer);
        QImage image(strImagePath, "PNG");
        QRect rt1 = image.rect();
        QRect rtwindow = painter.window();
        QRect rtview = painter.viewport();
        int nmax = 0;
        if (image.width() + 20 < width)
            nmax = std::max(image.width() + 20, width);
        else
            nmax = std::min(image.width() + 20, width);

        QRect rtimage(0, 0, nmax, rtwindow.height());
        QRect rtimageview(0, 0, nmax, rtview.height());
        int nmin = std::min(image.width(), nmax - 80);
        QRectF rtdes(40, 10, nmin, 100);
        QRectF rtsrc(0, 0, image.width(), image.height());
        painter.setWindow(rtimage);
        painter.setViewport(rtimageview);
        painter.drawImage(rtdes, image, rtsrc);  
        painter.setWindow(rtwindow);
        painter.setViewport(rtview);
    }

    //這裏再刪除圖片
    //QFile file(strImagePath);
    //QFile::remove(strImagePath);
}

4.備註

1.測試項目地址http://download.csdn.net/detail/zhang_ruiqiang/9164955
2.可編譯zint部分http://download.csdn.net/detail/zhang_ruiqiang/9165027
3.積分不足郵件發我,我單獨發你[email protected]
發佈了65 篇原創文章 · 獲贊 8 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章