Qt數(shù)據(jù)庫應(yīng)用之數(shù)據(jù)打印到pdf
一、前言
自從數(shù)據(jù)可以導(dǎo)出到xls,又有客戶提出了不同的需求,比如既然可以將數(shù)據(jù)導(dǎo)出到xls,那是否可以導(dǎo)出到pdf文件呢?因為xls打開以后用戶可以修改數(shù)據(jù)造假之類的,而pdf默認是不可編輯的,除非借助專業(yè)的工具,所以如果想要限定用戶導(dǎo)出數(shù)據(jù)不能被更改,那導(dǎo)出pdf是最佳選擇。寫程序往往都是這樣,一步步慢慢增加,隨著用戶需求的增加,程序量也越來越多,輪子組件也越來越多。往往客戶提需求的時候,一定要認真聆聽,尤其是一線用戶,實際使用的用戶,盡管有些不合理的需求,但是能滿足就盡量滿足,畢竟客戶就是上帝。
在Qt中要導(dǎo)出到pdf必須要用到qprinter類,相當于這些數(shù)據(jù)是打印到pdf的,所以確切點是叫打印到pdf文件,而不是導(dǎo)出數(shù)據(jù)到pdf,格式這塊由于采用的是打印,所以需要用html嵌套table表格的形式來打印,支持的格式就有限了,一般可以設(shè)置字體大小、顏色、邊框、對齊等,盡管是html,但是也是支持有限的html格式,這點要特別注意?,F(xiàn)在的qt版本貌似單獨將pdf提煉出來成了獨立的模塊,功能更強大。
結(jié)構(gòu)體支持的參數(shù):
- 文件名稱
- 表名
- 主標題
- 副標題
- 字段名稱集合
- 字段寬度集合
- 內(nèi)容集合
- 行內(nèi)容分隔符
- 子內(nèi)容分隔符
- 邊框?qū)挾?/li>
- 校驗列
- 校驗類型
- 校驗值
- 檢驗顏色
- 最后列拉伸填充
- 橫向排版
- 紙張邊距
二、功能特點
組件同時集成了導(dǎo)出數(shù)據(jù)到csv、xls、pdf和打印數(shù)據(jù)。
所有操作全部提供靜態(tài)方法無需new,數(shù)據(jù)和屬性等各種參數(shù)設(shè)置采用結(jié)構(gòu)體數(shù)據(jù),極為方便。
同時支持QTableView、QTableWidget、QStandardItemModel、QSqlTableModel等數(shù)據(jù)源。
提供靜態(tài)方法直接傳入QTableView、QTableWidget控件,自動識別列名、列寬和數(shù)據(jù)內(nèi)容。
每組功能都提供單獨的完整的示例,注釋詳細,非常適合各階段Qter程序員。
原創(chuàng)導(dǎo)出數(shù)據(jù)機制,不依賴任何office組件或者操作系統(tǒng)等第三方庫,支持嵌入式linux。
速度超快,9個字段10萬行數(shù)據(jù)只需要2秒鐘完成。
只需要四個步驟即可開始急速導(dǎo)出海量數(shù)據(jù)比如100W條記錄到Excel。
同時提供直接寫入數(shù)據(jù)接口和多線程寫入數(shù)據(jù)接口,不卡主界面。
可設(shè)置標題、副標題、表名。
可設(shè)置導(dǎo)出數(shù)據(jù)的字段名、列名、列寬。
可設(shè)置末尾列自動拉伸填充,默認拉伸更美觀。
可設(shè)置是否啟用校驗過濾數(shù)據(jù),啟用后符合規(guī)則的數(shù)據(jù)特殊顏色顯示。
可指定校驗的列、校驗規(guī)則、校驗值、校驗值數(shù)據(jù)類型。
校驗規(guī)則支持 精確等于==、大于>、大于等于>=、小于<、小于等于<=、不等于!=、包含contains。
校驗值數(shù)據(jù)類型支持 整型int、浮點型float、雙精度型double,默認文本字符串類型。
可設(shè)置隨機背景顏色及需要隨機背景色的列集合。
支持分組輸出數(shù)據(jù),比如按照設(shè)備分組輸出數(shù)據(jù),方便查看。
可設(shè)置csv分隔符、行內(nèi)容分隔符、子內(nèi)容分隔符。
可設(shè)置邊框?qū)挾?、自動填?shù)據(jù)類型,默認自動數(shù)據(jù)類型開啟。
可設(shè)置是否開啟數(shù)據(jù)單元格樣式,默認不開啟,不開啟可以節(jié)約大概30%的文件體積。
可設(shè)置橫向排版、紙張邊距等,比如導(dǎo)出到pdf以及打印數(shù)據(jù)。
支持圖文混排導(dǎo)出數(shù)據(jù)到pdf以及打印數(shù)據(jù),自動分頁。
靈活性超高,可自由更改源碼設(shè)置對齊方式、文字顏色、背景顏色等。
支持任意excel表格軟件,包括但不限于excel2003-2021、wps、openoffice等。
純Qt編寫,支持任意Qt版本+任意編譯器+任意系統(tǒng)。
三、體驗地址
體驗地址:https://pan.baidu.com/s/15ZKAlptW-rDcNq8zlzdYLg 提取碼:uyes 文件名:bin_dataout.zip
國內(nèi)站點:https://gitee.com/feiyangqingyun
國際站點:https://github.com/feiyangqingyun
四、效果圖
五、相關(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è)置標題 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)容,前面寫入標題,分隔符換成csv的定義的分隔符 QStringList list; //把標題加到內(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; }
到此這篇關(guān)于Qt數(shù)據(jù)庫應(yīng)用之數(shù)據(jù)打印到pdf的文章就介紹到這了,更多相關(guān)Qt數(shù)據(jù)打印到pdf內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
用C語言模仿Python函數(shù)的一種簡單實現(xiàn)方法
這篇文章主要介紹了用C語言模仿Python函數(shù)的一種簡單實現(xiàn)方法,需要的朋友可以參考下2017-05-05淺談C++虛重載操作符 virtual operator= 的使用方法
下面小編就為大家?guī)硪黄獪\談C++虛重載操作符 virtual operator= 的使用方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-01-01C++的靜態(tài)成員變量和靜態(tài)成員函數(shù)你了解多少
這篇文章主要為大家詳細介紹了C++的靜態(tài)成員變量和靜態(tài)成員函數(shù),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-02-02