十、Qt 操作PDF文件

《一、QT的前世今生》

《二、QT下载、安装及问题解决(windows系统)》
《三、Qt Creator使用》​​​

《四、Qt 的第一个demo-CSDN博客》

《五、带登录窗体的demo》

《六、新建窗体时,几种窗体的区别》

《七、Qt 信号和槽》

八、Qt C++ 毕业设计

九、Qt C++ 数据库开发

十、Qt 操作PDF文件-CSDN博客

一、下载Poppler开源库

使用Poppler第三方开源库,下载地址:Poppler,我下载的是最新版的poppler-24.01.0

poppler-24.01.0压缩包文件下载后需要自行编译,生成可用的类库。如果Poppler解析出来的PDF文件无法正常显示中文,需要将poppler-data-0.4.12包里的相关文件拷贝到指定目录下,才能正常显示中文。我的中文显示正常,所以我没有下载poppler-data-0.4.12包。

也可以下载从Poppler Win32 download | SourceForge.net 下载windows下直接可用的dll库,但是上边的poppler-24.01.0压缩包还是需要下载的,因为头文件在此包中。

二、搭建环境

在程序目录下新建poppler文件夹,我把公用的类库都放到了CommDEV文件夹下

将poppler-24.01.0压缩包中的 \qt5\src 文件夹下的所有文件拷贝到上边新建的poppler文件夹中。因为像poppler-qt5.h对应的是poppler-qt5.dll,在写程序时都要用到。

将poppler-0.39.0-win32包解压缩后的libpoppler.dll,libpoppler-qt5.dll和lib文件夹下的libpoppler.dll.a,libpoppler-qt5.dll.a

这4个dll拷贝到程序所在的目录下的poppler文件夹内。

以上步骤操作大家仔细看,别把文件放错了地方。

三、配置pro文件

以下标红的地方需要注意,我们是在windows系统下开发,没有用的咱们不选。

再按以上的步骤添加另一个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("文件内无内容:%1").arg(filename));//不可用则输出错误信息,并返回

return;

}

//将PDF文档的每一页输出为QImage

// for(int pageNumber=0;pageNumbernumPages();pageNumber++){

//获取指定页码的页面,页码从0开始

Poppler::Page* pdfPage = document->page(0);

if (pdfPage == 0) {

qDebug()

return;

}

//将页面内容转换为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;

如果在编译程序时出现错误,缺少poppler-export.h,可从以下连接下载

https://download.csdn.net/download/zhouhui1982/88747128

运行效果

目前只能显示第一页的pdf内容,在下一章节中,我们再来细化pdf的相关操作,比如滚动条,下一页,上一页按钮等。以前打包依赖库,支持可以单独运行的程序。

相关推荐
蜀黍@猿13 分钟前
C/C++基础错题归纳
c++
古希腊掌管学习的神21 分钟前
[LeetCode-Python版]相向双指针——611. 有效三角形的个数
开发语言·python·leetcode
赵钰老师22 分钟前
【R语言遥感技术】“R+遥感”的水环境综合评价方法
开发语言·数据分析·r语言
雨中rain28 分钟前
Linux -- 从抢票逻辑理解线程互斥
linux·运维·c++
就爱学编程30 分钟前
重生之我在异世界学编程之C语言小项目:通讯录
c语言·开发语言·数据结构·算法
Oneforlove_twoforjob1 小时前
【Java基础面试题025】什么是Java的Integer缓存池?
java·开发语言·缓存
emoji1111111 小时前
前端对页面数据进行缓存
开发语言·前端·javascript
每天都要学信号1 小时前
Python(第一天)
开发语言·python
TENET信条1 小时前
day53 第十一章:图论part04
开发语言·c#·图论
生信圆桌1 小时前
【生信圆桌x教程系列】如何安装 seurat V5版本R包,最详细安装手册
开发语言·r语言