?《一、QT的前世今生》
《二、QT下載、安裝及問題解決(windows系統(tǒng))》
《三、Qt Creator使用》????
《四、Qt 的第一個demo-CSDN博客》
《五、帶登錄窗體的demo》
《六、新建窗體時,幾種窗體的區(qū)別》?
《七、Qt 信號和槽》?
《八、Qt C++ 畢業(yè)設(shè)計》
《九、Qt C++ 數(shù)據(jù)庫開發(fā)》
《十、Qt 操作PDF文件-CSDN博客》
一、下載Poppler開源庫
使用Poppler第三方開源庫,下載地址:Poppler,我下載的是最新版的poppler-24.01.0
poppler-24.01.0壓縮包文件下載后需要自行編譯,生成可用的類庫。如果Poppler解析出來的PDF文件無法正常顯示中文,需要將poppler-data-0.4.12包里的相關(guān)文件拷貝到指定目錄下,才能正常顯示中文。我的中文顯示正常,所以我沒有下載poppler-data-0.4.12包。
也可以下載從Poppler Win32 download | SourceForge.net 下載windows下直接可用的dll庫,但是上邊的poppler-24.01.0壓縮包還是需要下載的,因為頭文件在此包中。
二、搭建環(huán)境
在程序目錄下新建poppler文件夾,我把公用的類庫都放到了CommDEV文件夾下
將poppler-24.01.0壓縮包中的 \qt5\src 文件夾下的所有文件拷貝到上邊新建的poppler文件夾中。因為像poppler-qt5.h對應(yīng)的是poppler-qt5.dll,在寫程序時都要用到。
將poppler-0.39.0-win32包解壓縮后的libpoppler.dll,libpoppler-qt5.dll和lib文件夾下的libpoppler.dll.a,libpoppler-qt5.dll.a
這4個dll拷貝到程序所在的目錄下的poppler文件夾內(nèi)。
以上步驟操作大家仔細(xì)看,別把文件放錯了地方。
三、配置pro文件
以下標(biāo)紅的地方需要注意,我們是在windows系統(tǒng)下開發(fā),沒有用的咱們不選。
再按以上的步驟添加另一個dll
添加完的pro文件里多出了以下這些代碼
表示添加成功。
四、開始寫代碼
引用頭文件
#include "poppler-qt5.h"
編寫代碼
QString filename=QFileDialog::getOpenFileName(this,QString::fromUtf8("打開"),"","pdf file (*.pdf)");//獲取pdf文件路徑
if(filename.isEmpty()){
return;//如果文件路徑為空則返回
}
Poppler::Document* document = Poppler::Document::load(filename);//加載pdf文件
if (!document || document->isLocked()) {
QMessageBox::information(this,"提示",QString::fromUtf8("無法打開文件:%1").arg(filename));//如果加載不成功,輸出錯誤信息,并返回
delete document;
return;
}
//再次檢查document是否可用
if (document == 0) {
// ui->label_message->setText(QString::fromUtf8("文件內(nèi)無內(nèi)容:%1").arg(filename));//不可用則輸出錯誤信息,并返回
return;
}
//將PDF文檔的每一頁輸出為QImage
// for(int pageNumber=0;pageNumbernumPages();pageNumber++){
//獲取指定頁碼的頁面,頁碼從0開始
Poppler::Page* pdfPage = document->page(0);
if (pdfPage == 0) {
qDebug()
return;
}
//將頁面內(nèi)容轉(zhuǎn)換為QImage
QImage image = pdfPage->renderToImage();
// double xres=72.0, yres=72.0; int x=-1, y=-1, width=-1, height=-1;
// QImage image = pdfPage->renderToImage(xres, yres, x, y, width, height);
// if (image.isNull()) {
// qDebug()
// return;
// }
// 在QLabel中顯示QImage
QLabel *label = new QLabel(this);
label->setPixmap(QPixmap::fromImage(image));
ui->horizontalLayout->addWidget(label);
//使用完后記得釋放掉Poppler::Page* pdfPage
delete pdfPage;
// }
delete document;
如果在編譯程序時出現(xiàn)錯誤,缺少poppler-export.h,可從以下連接下載
https://download.csdn.net/download/zhouhui1982/88747128
運行效果
文章來源:http://www.zghlxwxcb.cn/news/detail-798938.html
目前只能顯示第一頁的pdf內(nèi)容,在下一章節(jié)中,我們再來細(xì)化pdf的相關(guān)操作,比如滾動條,下一頁,上一頁按鈕等。以前打包依賴庫,支持可以單獨運行的程序。文章來源地址http://www.zghlxwxcb.cn/news/detail-798938.html
到了這里,關(guān)于十、Qt 操作PDF文件的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!