最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Qt數(shù)據(jù)庫(kù)應(yīng)用之實(shí)現(xiàn)圖片轉(zhuǎn)pdf

 更新時(shí)間:2022年06月01日 09:20:37   作者:feiyangqingyun  
這篇文章主要為大家詳細(xì)介紹了如何利用Qt實(shí)現(xiàn)圖片轉(zhuǎn)pdf功能,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)或工作有一定參考價(jià)值,需要的可以了解一下

一、前言

用戶的需求真的是千奇百怪,剛做完不同頁(yè)面橫向縱向排版的需求,又來個(gè)需要圖片轉(zhuǎn)pdf的需求,提供靜態(tài)函數(shù)直接使用。 經(jīng)過這么些年的社會(huì)的毒打,我的原則是:用戶是上帝和大爺,盡量站在用戶的角度換位思考,只要是合理或者基本合理的需求,甚至說只要不是太過分,給錢就干。

接到這個(gè)需求的時(shí)候,第一時(shí)間想到的就是用QPainter繪制圖片到打印機(jī)對(duì)象,之前就用QPainter繪制了200多個(gè)自定義控件,對(duì)于QPainter如何繪制,心中早有代碼自動(dòng)生成了,現(xiàn)在看到真實(shí)世界的很多東西,尤其是圖形,都自動(dòng)在腦海中轉(zhuǎn)成了代碼,比如公交車上的路線圖,到某個(gè)站點(diǎn)自動(dòng)點(diǎn)亮。既然QPrinter支持QPainter繪制,這兩者結(jié)合就是對(duì)程序員的繪制功底要求高,熟悉了以后繪制起來還是非常順手的,因?yàn)樗悸泛头椒ㄍ耆粯印?/p>

在封裝的本函數(shù)中,可以直接傳入圖片文件名稱,需要保存的文件名,如果保存的文件名為空,則取同名文件,就拓展名格式不一樣,還可以傳入資源文件中的圖片,可以設(shè)置如何縮放,是拉伸填充還是等比例縮放等。

二、功能特點(diǎn)

  1. 組件同時(shí)集成了導(dǎo)出數(shù)據(jù)到csv、xls、pdf和打印數(shù)據(jù)。
  2. 所有操作全部提供靜態(tài)方法無需new,數(shù)據(jù)和屬性等各種參數(shù)設(shè)置采用結(jié)構(gòu)體數(shù)據(jù),極為方便。
  3. 同時(shí)支持QTableView、QTableWidget、QStandardItemModel、QSqlTableModel等數(shù)據(jù)源。
  4. 提供靜態(tài)方法直接傳入QTableView、QTableWidget控件,自動(dòng)識(shí)別列名、列寬和數(shù)據(jù)內(nèi)容。
  5. 每組功能都提供單獨(dú)的完整的示例,注釋詳細(xì),非常適合各階段Qter程序員。
  6. 原創(chuàng)導(dǎo)出數(shù)據(jù)機(jī)制,不依賴任何office組件或者操作系統(tǒng)等第三方庫(kù),支持嵌入式linux。
  7. 速度超快,9個(gè)字段10萬行數(shù)據(jù)只需要2秒鐘完成。
  8. 只需要四個(gè)步驟即可開始急速導(dǎo)出海量數(shù)據(jù)比如100W條記錄到Excel。
  9. 同時(shí)提供直接寫入數(shù)據(jù)接口和多線程寫入數(shù)據(jù)接口,不卡主界面。
  10. 可設(shè)置標(biāo)題、副標(biāo)題、表名。
  11. 可設(shè)置導(dǎo)出數(shù)據(jù)的字段名、列名、列寬。
  12. 可設(shè)置末尾列自動(dòng)拉伸填充,默認(rèn)拉伸更美觀。
  13. 可設(shè)置是否啟用校驗(yàn)過濾數(shù)據(jù),啟用后符合規(guī)則的數(shù)據(jù)特殊顏色顯示。
  14. 可指定校驗(yàn)的列、校驗(yàn)規(guī)則、校驗(yàn)值、校驗(yàn)值數(shù)據(jù)類型。
  15. 校驗(yàn)規(guī)則支持 精確等于==、大于>、大于等于>=、小于<、小于等于<=、不等于!=、包含contains。
  16. 校驗(yàn)值數(shù)據(jù)類型支持 整型int、浮點(diǎn)型float、雙精度型double,默認(rèn)文本字符串類型。
  17. 可設(shè)置隨機(jī)背景顏色及需要隨機(jī)背景色的列集合。
  18. 支持分組輸出數(shù)據(jù),比如按照設(shè)備分組輸出數(shù)據(jù),方便查看。
  19. 可設(shè)置csv分隔符、行內(nèi)容分隔符、子內(nèi)容分隔符。
  20. 可設(shè)置邊框?qū)挾取⒆詣?dòng)填數(shù)據(jù)類型,默認(rèn)自動(dòng)數(shù)據(jù)類型開啟。
  21. 可設(shè)置是否開啟數(shù)據(jù)單元格樣式,默認(rèn)不開啟,不開啟可以節(jié)約大概30%的文件體積。
  22. 可設(shè)置橫向排版、紙張邊距等,比如導(dǎo)出到pdf以及打印數(shù)據(jù)。
  23. 提供圖文混排導(dǎo)出數(shù)據(jù)到pdf以及打印示例,自動(dòng)分頁(yè),支持多圖。
  24. 提供一個(gè)打印樣板中同時(shí)包括橫向縱向排版示例。
  25. 提供靜態(tài)函數(shù)將控件截圖導(dǎo)出到pdf文件。
  26. 提供靜態(tài)函數(shù)將圖片轉(zhuǎn)成pdf文件。
  27. 提供靜態(tài)函數(shù)將csv文件轉(zhuǎn)成xls文件,支持列寬表名等參數(shù)設(shè)置。
  28. 針對(duì)每列可分別設(shè)置字段對(duì)齊樣式、內(nèi)容對(duì)齊樣式,包括左對(duì)齊、居中對(duì)齊、右對(duì)齊。
  29. 靈活性超高,可自由更改源碼設(shè)置對(duì)齊方式、文字顏色、背景顏色等。
  30. 支持任意excel表格軟件,包括但不限于excel2003-2021、wps、openoffice等。
  31. 純Qt編寫,支持任意Qt版本+任意編譯器+任意系統(tǒng)。

三、體驗(yàn)地址

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

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

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

四、效果圖

五、相關(guān)代碼

void DataOther::toPdf(const QPixmap &pixmap, const QString &fileName, int scale)
{
    QPrinter printer(QPrinter::HighResolution);
    if (scale > 1) {
        printer.setResolution(96);
    }
    printer.setFullPage(false);
    printer.setOutputFormat(QPrinter::PdfFormat);
    printer.setOutputFileName(fileName);
#if (QT_VERSION >= QT_VERSION_CHECK(5,3,0))
    printer.setPageSize(QPageSize(QPageSize::A4));
    printer.setPageOrientation(QPageLayout::Portrait);
#else
    printer.setPaperSize(QPrinter::A4);
    printer.setOrientation(QPrinter::Portrait);
#endif

    //調(diào)整圖片大小比如等比例縮放拉伸填充等
    QRectF rect = printer.pageRect(QPrinter::DevicePixel);
    QPixmap pix = pixmap;

    //保存原圖看下效果
#if 0
    QString file = fileName;
    file.replace("pdf", "png");
    pix.save(file, "png");
#endif

    if (scale == 0) {
        //pix = pix.scaled(rect.width(), rect.height(), Qt::KeepAspectRatio, Qt::FastTransformation);
        pix = pix.scaled(rect.width(), rect.height(), Qt::KeepAspectRatio, Qt::SmoothTransformation);
    } else if (scale == 1) {
        pix = pix.scaled(rect.width(), rect.height());
    }

    QPainter painter;
    painter.begin(&printer);

    int x = 0;
    int y = 0;
    //圖片寬度小于繪制區(qū)域?qū)挾葲]有縮放處理過的圖片 才需要按照比例自動(dòng)居中繪制
    if (pixmap.width() < rect.width() && scale > 1) {
        x = rect.center().x() - pix.width() / 2;
        //y = rect.center().y() - pix.height() / 2;
    }

    painter.drawPixmap(QPoint(x, y), pix);
    painter.end();
}

void DataOther::widgetToPdf(QWidget *widget, const QString &fileName, int scale)
{
#if (QT_VERSION >= QT_VERSION_CHECK(5,0,0))
    QPixmap pixmap = QApplication::primaryScreen()->grabWindow(widget->winId());
#else
    QPixmap pixmap = QPixmap::grabWindow(widget->winId());
#endif
    toPdf(pixmap, fileName, scale);
}

QString DataOther::imageToPdf(const QString &imageFile, const QString &pdfFile, int scale)
{
    //為空則同名文件
    QString fileName = pdfFile;
    if (fileName.isEmpty()) {
        fileName = imageFile;
        fileName.replace("." + QFileInfo(imageFile).suffix(), ".pdf");
    }

    //資源文件則當(dāng)前目錄下
    if (imageFile.startsWith(":/")) {
        fileName = qApp->applicationDirPath() + "/" + QFileInfo(imageFile).baseName() + ".pdf";
    }

    toPdf(QPixmap(imageFile), fileName, scale);
    return fileName;
}

到此這篇關(guān)于Qt數(shù)據(jù)庫(kù)應(yīng)用之實(shí)現(xiàn)圖片轉(zhuǎn)pdf的文章就介紹到這了,更多相關(guān)Qt 圖片轉(zhuǎn)pdf內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 一文快速掌握C++雙端數(shù)組容器deque的使用

    一文快速掌握C++雙端數(shù)組容器deque的使用

    本文和大家分享的是和vector容器功能很像的容器——deque,了解deque容器的本質(zhì),使用方法以及與vector容器的不同之處,感興趣的快跟隨小編一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • C++調(diào)用迅雷接口解析XML下載功能(迅雷下載功能)

    C++調(diào)用迅雷接口解析XML下載功能(迅雷下載功能)

    這篇文章主要介紹了C++調(diào)用迅雷接口,封裝解析XML下載的類,功能簡(jiǎn)單,大家參考使用吧
    2013-11-11
  • 如何使用arm-none-eabi-gcc編譯器搭建STM32的Vscode開發(fā)環(huán)境

    如何使用arm-none-eabi-gcc編譯器搭建STM32的Vscode開發(fā)環(huán)境

    這篇文章主要介紹了使用arm-none-eabi-gcc編譯器搭建STM32的Vscode開發(fā)環(huán)境,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • C語言實(shí)現(xiàn)簡(jiǎn)單的三子棋游戲

    C語言實(shí)現(xiàn)簡(jiǎn)單的三子棋游戲

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)三子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • Qt數(shù)據(jù)庫(kù)應(yīng)用之實(shí)現(xiàn)通用數(shù)據(jù)庫(kù)采集

    Qt數(shù)據(jù)庫(kù)應(yīng)用之實(shí)現(xiàn)通用數(shù)據(jù)庫(kù)采集

    這篇文章主要為大家介紹了Qt中是如何實(shí)現(xiàn)通用數(shù)據(jù)庫(kù)采集的,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Qt有一定幫助,感興趣的小伙伴可以了解一下
    2022-03-03
  • C++11中union的使用方法示例

    C++11中union的使用方法示例

    這篇文章主要給大家介紹了關(guān)于C++11中union的使用方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-09-09
  • C語言字符串函數(shù)與內(nèi)存函數(shù)精講

    C語言字符串函數(shù)與內(nèi)存函數(shù)精講

    這篇文章主要介紹一些c語言中常用字符串函數(shù)和內(nèi)存函數(shù)的使用,并且為了幫助讀者理解和使用,也都模擬實(shí)現(xiàn)了他們的代碼,需要的朋友可以參考一下
    2022-04-04
  • 帶你粗略了解c++的最大乘積

    帶你粗略了解c++的最大乘積

    這篇文章主要為大家詳細(xì)介紹了C++的最大乘積,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能給你帶來幫助
    2021-08-08
  • QT實(shí)現(xiàn)圖片輪播

    QT實(shí)現(xiàn)圖片輪播

    這篇文章主要介紹了QT實(shí)現(xiàn)圖片輪播,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • [c++]變量聲明與定義的規(guī)則詳解

    [c++]變量聲明與定義的規(guī)則詳解

    這篇文章主要介紹了[c++]變量聲明與定義的規(guī)則詳解,對(duì)于學(xué)習(xí)c++的朋友來說這是一個(gè)很細(xì)膩的文章,代碼完整,需要的朋友可以參考下
    2021-04-04

最新評(píng)論

广水市| 江陵县| 福海县| 赣榆县| 鄂托克前旗| 大兴区| 芒康县| 昭觉县| 塔河县| 白朗县| 仙游县| 高碑店市| 高碑店市| 洱源县| 平和县| 汉阴县| 汨罗市| 怀仁县| 万盛区| 太保市| 临湘市| 大港区| 枣庄市| 保定市| 株洲市| 报价| 黄冈市| 务川| 调兵山市| 儋州市| 榆树市| 闽清县| 桃源县| 隆安县| 无极县| 鹤壁市| 武安市| 浮山县| 松阳县| 泌阳县| 保康县|