溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Qt數(shù)據(jù)庫應(yīng)用中如何將數(shù)據(jù)打印到pdf

發(fā)布時(shí)間:2022-01-17 16:20:20 來源:億速云 閱讀:155 作者:柒染 欄目:開發(fā)技術(shù)

這篇文章的內(nèi)容主要圍繞Qt數(shù)據(jù)庫應(yīng)用中如何將數(shù)據(jù)打印到pdf進(jìn)行講述,文章內(nèi)容清晰易懂,條理清晰,非常適合新手學(xué)習(xí),值得大家去閱讀。感興趣的朋友可以跟隨小編一起閱讀吧。希望大家通過這篇文章有所收獲!

一、前言

自從數(shù)據(jù)可以導(dǎo)出到xls,又有客戶提出了不同的需求,比如既然可以將數(shù)據(jù)導(dǎo)出到xls,那是否可以導(dǎo)出到pdf文件呢?因?yàn)閤ls打開以后用戶可以修改數(shù)據(jù)造假之類的,而pdf默認(rèn)是不可編輯的,除非借助專業(yè)的工具,所以如果想要限定用戶導(dǎo)出數(shù)據(jù)不能被更改,那導(dǎo)出pdf是最佳選擇。寫程序往往都是這樣,一步步慢慢增加,隨著用戶需求的增加,程序量也越來越多,輪子組件也越來越多。往往客戶提需求的時(shí)候,一定要認(rèn)真聆聽,尤其是一線用戶,實(shí)際使用的用戶,盡管有些不合理的需求,但是能滿足就盡量滿足,畢竟客戶就是上帝。

在Qt中要導(dǎo)出到pdf必須要用到qprinter類,相當(dāng)于這些數(shù)據(jù)是打印到pdf的,所以確切點(diǎn)是叫打印到pdf文件,而不是導(dǎo)出數(shù)據(jù)到pdf,格式這塊由于采用的是打印,所以需要用html嵌套table表格的形式來打印,支持的格式就有限了,一般可以設(shè)置字體大小、顏色、邊框、對齊等,盡管是html,但是也是支持有限的html格式,這點(diǎn)要特別注意?,F(xiàn)在的qt版本貌似單獨(dú)將pdf提煉出來成了獨(dú)立的模塊,功能更強(qiáng)大。

結(jié)構(gòu)體支持的參數(shù):

  • 文件名稱

  • 表名

  • 主標(biāo)題

  • 副標(biāo)題

  • 字段名稱集合

  • 字段寬度集合

  • 內(nèi)容集合

  • 行內(nèi)容分隔符

  • 子內(nèi)容分隔符

  • 邊框?qū)挾?/p>

  • 校驗(yàn)列

  • 校驗(yàn)類型

  • 校驗(yàn)值

  • 檢驗(yàn)顏色

  • 最后列拉伸填充

  • 橫向排版

  • 紙張邊距

二、功能特點(diǎn)

組件同時(shí)集成了導(dǎo)出數(shù)據(jù)到csv、xls、pdf和打印數(shù)據(jù)。

所有操作全部提供靜態(tài)方法無需new,數(shù)據(jù)和屬性等各種參數(shù)設(shè)置采用結(jié)構(gòu)體數(shù)據(jù),極為方便。

同時(shí)支持QTableView、QTableWidget、QStandardItemModel、QSqlTableModel等數(shù)據(jù)源。

提供靜態(tài)方法直接傳入QTableView、QTableWidget控件,自動(dòng)識別列名、列寬和數(shù)據(jù)內(nèi)容。

每組功能都提供單獨(dú)的完整的示例,注釋詳細(xì),非常適合各階段Qter程序員。

原創(chuàng)導(dǎo)出數(shù)據(jù)機(jī)制,不依賴任何office組件或者操作系統(tǒng)等第三方庫,支持嵌入式linux。

速度超快,9個(gè)字段10萬行數(shù)據(jù)只需要2秒鐘完成。

只需要四個(gè)步驟即可開始急速導(dǎo)出海量數(shù)據(jù)比如100W條記錄到Excel。

同時(shí)提供直接寫入數(shù)據(jù)接口和多線程寫入數(shù)據(jù)接口,不卡主界面。

可設(shè)置標(biāo)題、副標(biāo)題、表名。

可設(shè)置導(dǎo)出數(shù)據(jù)的字段名、列名、列寬。

可設(shè)置末尾列自動(dòng)拉伸填充,默認(rèn)拉伸更美觀。

可設(shè)置是否啟用校驗(yàn)過濾數(shù)據(jù),啟用后符合規(guī)則的數(shù)據(jù)特殊顏色顯示。

可指定校驗(yàn)的列、校驗(yàn)規(guī)則、校驗(yàn)值、校驗(yàn)值數(shù)據(jù)類型。

校驗(yàn)規(guī)則支持 精確等于==、大于>、大于等于>=、小于<、小于等于<=、不等于!=、包含contains。

校驗(yàn)值數(shù)據(jù)類型支持 整型int、浮點(diǎn)型float、雙精度型double,默認(rèn)文本字符串類型。

可設(shè)置隨機(jī)背景顏色及需要隨機(jī)背景色的列集合。

支持分組輸出數(shù)據(jù),比如按照設(shè)備分組輸出數(shù)據(jù),方便查看。

可設(shè)置csv分隔符、行內(nèi)容分隔符、子內(nèi)容分隔符。

可設(shè)置邊框?qū)挾?、自?dòng)填數(shù)據(jù)類型,默認(rèn)自動(dòng)數(shù)據(jù)類型開啟。

可設(shè)置是否開啟數(shù)據(jù)單元格樣式,默認(rèn)不開啟,不開啟可以節(jié)約大概30%的文件體積。

可設(shè)置橫向排版、紙張邊距等,比如導(dǎo)出到pdf以及打印數(shù)據(jù)。

支持圖文混排導(dǎo)出數(shù)據(jù)到pdf以及打印數(shù)據(jù),自動(dòng)分頁。

靈活性超高,可自由更改源碼設(shè)置對齊方式、文字顏色、背景顏色等。

支持任意excel表格軟件,包括但不限于excel2003-2021、wps、openoffice等。

純Qt編寫,支持任意Qt版本+任意編譯器+任意系統(tǒng)。

三、體驗(yàn)地址

體驗(yàn)地址:https://pan.baidu.com/s/1ZxG-oyUKe286LPMPxOrO2A 提取碼:o05q 文件名:bin_dataout.zip

國內(nèi)站點(diǎn):https://gitee.com/feiyangqingyun

國際站點(diǎn):https://github.com/feiyangqingyun

四、效果圖

Qt數(shù)據(jù)庫應(yīng)用中如何將數(shù)據(jù)打印到pdf

五、相關(guān)代碼

QString DataHelper::DataOut(quint8 type, const QString &file, const QString &title,
                            const QString &sheet, const QStringList &content,
                            const QStringList &columnNames, const QList<int> &columnWidths)
{
    //設(shè)置結(jié)構(gòu)體數(shù)據(jù)
    DataContent dataContent;
    //填充內(nèi)容
    dataContent.content = content;
    //設(shè)置列名列寬
    dataContent.columnNames = columnNames;
    dataContent.columnWidths = columnWidths;
    //設(shè)置標(biāo)題
    dataContent.title = title;

    //如果是導(dǎo)出數(shù)據(jù)則先判斷文件名稱是否為空,為空則彈出文件對話框選擇
    QString fileName = file;
    if (fileName.isEmpty() && type < 3) {
        //不同的格式后綴
        QString filter = "all files (*.*)";
        if (type == 0) {
            filter = "csv files (*.csv)";
        } else if (type == 1) {
            filter = "xls files (*.xls)";
        } else if (type == 2) {
            filter = "pdf files (*.pdf)";
        }

        fileName = QFileDialog::getSaveFileName(0, "選擇保存文件", "", filter);
        if (fileName.isEmpty()) {
            return fileName;
        }
    }

    //設(shè)置文件名
    dataContent.fileName = fileName;
    //xls還需要設(shè)置表名
    dataContent.sheetName = sheet;

    //調(diào)用靜態(tài)函數(shù)
    if (type == 0) {
        //重新組織內(nèi)容,前面寫入標(biāo)題,分隔符換成csv的定義的分隔符
        QStringList list;
        //把標(biāo)題加到內(nèi)容中
        list << columnNames.join(DataCsv::CsvSpliter);
        //重新更換分隔符
        foreach (QString text, content) {
            text.replace(";", DataCsv::CsvSpliter);
            list << text;
        }
        DataCsv::outputData(fileName, list);
    } else if (type == 1) {
        DataXls::saveXls(dataContent);
    } else if (type == 2) {
        DataPrint::savePdf(dataContent);
    } else if (type == 3) {
        DataPrint::print(dataContent);
    }

    return fileName;
}

感謝你的閱讀,相信你對“Qt數(shù)據(jù)庫應(yīng)用中如何將數(shù)據(jù)打印到pdf”這一問題有一定的了解,快去動(dòng)手實(shí)踐吧,如果想了解更多相關(guān)知識點(diǎn),可以關(guān)注億速云網(wǎng)站!小編會(huì)繼續(xù)為大家?guī)砀玫奈恼拢?/p>

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI