【第六篇】Qt學習與使用---在qt中列印PDF檔案(不是生成PDF)
阿新 • • 發佈:2018-12-12
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、其他
歡迎討論!