1. 程式人生 > >【第六篇】Qt學習與使用---在qt中列印PDF檔案(不是生成PDF)

【第六篇】Qt學習與使用---在qt中列印PDF檔案(不是生成PDF)

1、目的

如題,列印pdf檔案中的內容。

2、思路

(1)思路1:可以通過Poppler類來讀取pdf中的內容,並轉化成圖片,再 列印這些圖片。這個方法的瑕疵是,需要在列印的時候準確的寫出一頁圖片在A4紙上的列印座標和大小。否則會導致與原文不同。

(2)思路2:呼叫系統介面,讓windows來列印。這個方法有一個注意點,就是傳入的檔案路徑一定要是絕對路徑。具體到哪一個磁碟開始。

3、關鍵程式碼(我是用的是思路2)





/*
這裡的filename名字代表的是相對路徑,在函式中,filepath是絕對路徑。
*/
bool MyPrintPreViewDialog::printPDF(QString fileName)
{
    QPrinter printer;
    QString printerName = printer.printerName();
    // no default printer or no file return false
    if( printerName.size() == 0 || fileName.size() == 0)
        return false;
    QFileInfo fi(fileName);
    QString filePath = fi.absoluteFilePath();
    if(!fi.exists())
        return false;
    int ret = 0;
    ret = (int)ShellExecuteW(NULL,
                             QString("print").toStdWString().c_str(),
                             filePath.toStdWString().c_str(),
                             NULL,
                             NULL,
                             SW_HIDE);
    // if return number bigger than 31 indicate succ
    qDebug()<<"ret:"<<ret<<"--SE_ERR_NOASSOC:"<<SE_ERR_NOASSOC;
    qDebug()<<"filePath:"<<filePath.toStdWString().c_str();
    if (ret > SE_ERR_NOASSOC)
        return true;
    return false;

}

注意:

需要包含標頭檔案:#include <windows.h>

 

4、其他

歡迎討論!