欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Qt數(shù)據(jù)庫應用之實現(xiàn)圖片轉pdf

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

一、前言

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

接到這個需求的時候,第一時間想到的就是用QPainter繪制圖片到打印機對象,之前就用QPainter繪制了200多個自定義控件,對于QPainter如何繪制,心中早有代碼自動生成了,現(xiàn)在看到真實世界的很多東西,尤其是圖形,都自動在腦海中轉成了代碼,比如公交車上的路線圖,到某個站點自動點亮。既然QPrinter支持QPainter繪制,這兩者結合就是對程序員的繪制功底要求高,熟悉了以后繪制起來還是非常順手的,因為思路和方法完全一樣。

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

二、功能特點

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

三、體驗地址

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

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

國際站點:https://github.com/feiyangqingyun

四、效果圖

五、相關代碼

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

    //調整圖片大小比如等比例縮放拉伸填充等
    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ū)域寬度沒有縮放處理過的圖片 才需要按照比例自動居中繪制
    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");
    }

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

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

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

相關文章

  • C語言從編譯到運行過程詳解

    C語言從編譯到運行過程詳解

    這篇文章主要介紹了C語言從編譯到運行的一個過程的相關資料,需要的朋友可以參考下面文章具體的內(nèi)容
    2021-09-09
  • C語言通訊錄管理系統(tǒng)課程設計

    C語言通訊錄管理系統(tǒng)課程設計

    這篇文章主要為大家詳細介紹了C語言通訊錄管理系統(tǒng)課程設計,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • C++ Dijkstra算法之求圖中任意兩頂點的最短路徑

    C++ Dijkstra算法之求圖中任意兩頂點的最短路徑

    這篇文章主要為大家詳細介紹了用C++經(jīng)典算法-Dijkstra算法求任意兩頂點之間的最短路徑,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • C++二叉搜索樹BSTree使用詳解

    C++二叉搜索樹BSTree使用詳解

    二叉搜索樹(Binary Search Tree)又稱二叉排序樹,也稱作二叉查找樹它或者是一棵空樹,或者是具有以下性質的二叉樹,若它的左子樹不為空,則左子樹上所有節(jié)點的值都小于根節(jié)點的值,若它的右子樹不為空,則右子樹上所有節(jié)點的值都大于根節(jié)點的值
    2023-03-03
  • C++全面覆蓋內(nèi)存管理知識講解

    C++全面覆蓋內(nèi)存管理知識講解

    本章主要介紹C語言與C++的內(nèi)存管理,以C++的內(nèi)存分布作為引入,介紹C++不同于C語言的內(nèi)存管理方式(new delete對比 malloc free),感興趣的朋友來看看吧
    2022-06-06
  • C語言實現(xiàn)軍旗游戲的示例代碼

    C語言實現(xiàn)軍旗游戲的示例代碼

    這篇文章主要為大家詳細介紹了如何利用C語言實現(xiàn)軍旗游戲,文中的示例代碼講解詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-11-11
  • Qt實現(xiàn)數(shù)據(jù)進行加密、解密的步驟

    Qt實現(xiàn)數(shù)據(jù)進行加密、解密的步驟

    本文主要介紹了Qt實現(xiàn)數(shù)據(jù)進行加密、解密的步驟,包含QCryptographicHash和Qt-AES兩種庫的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • 詳解C++中的指針、數(shù)組指針與函數(shù)指針

    詳解C++中的指針、數(shù)組指針與函數(shù)指針

    本文從初學者的角度,深入淺出地講解C++中的指針、數(shù)組指針與函數(shù)指針,對最?;煜囊脗鬟f、值傳遞和指針傳遞做了區(qū)處,需要的朋友可以參考下
    2015-07-07
  • c/c++內(nèi)存分配大小實例講解

    c/c++內(nèi)存分配大小實例講解

    在本篇文章里小編給大家整理了一篇關于c/c++內(nèi)存分配大小實例講解內(nèi)容,有需要的朋友們可以跟著學習參考下。
    2021-11-11
  • C++未定義行為(undefined behavior)

    C++未定義行為(undefined behavior)

    對于未定義行為,C++標準沒有明確規(guī)定編譯器們應該怎么做,那么執(zhí)行的結果就是不可預料的。下面我們來詳細探討下
    2017-02-02

最新評論