Qt WORD/PDF(一)使用 QtPdfium库实现 PDF 预览

文章目录

  • 一、简介
  • [二、下载 QtPdfium](#二、下载 QtPdfium)
  • [三、加载 QtPdfium 动态库](#三、加载 QtPdfium 动态库)
  • [四、Demo 使用](#四、Demo 使用)

关于QT Widget 其它文章请点击这里: QT Widget

姊妹篇:

Qt WORD/PDF(一)使用 QtPdfium库实现 PDF 操作
Qt WORD/PDF(二)使用 QtPdfium库实现 PDF 预览、打印等
Qt WORD/PDF(三)使用 QAxObject 对 Word 替换(QML)
Qt WORD/PDF(四)使用 QAxObject 对 Word 替换(QWidget)


一、简介

官方:

Qt6 从版本 6.2 开始提供了对PDF的官方支持。这个模块基于 Pdfium,为Qt应用提供了原生的PDF渲染功能,使得开发者可以更方便地在Qt应用中集成PDF查看和处理功能。而我们为了更好的兼容性,一般采用 PopplerQtPdfium PDF渲染引擎。

Poppler:

Poppler是一个开源的PDF渲染库,基于xpdf项目,提供了一个强大的API用于PDF文档的解析和渲染。它支持将PDF转换为图像、提取文本、查找内容、以及更多PDF操作。它的优势在于功能全面且经过了广泛的测试。

Poppler提供了对PDF文件的广泛支持,包括不同的字体、图形和表单的渲染。

它支持多种语言,包括C++和Python,并且有多个Qt绑定(如poppler-qt5)以便在Qt中使用。

QtPdfium:

QtPdfium 是基于Pdfium库的一个Qt绑定。Pdfium是一个由Google开发并开源的PDF渲染引擎,它被广泛应用于Chrome浏览器和其他一些Google产品中。QtPdfium则是一个专门将Pdfium引入Qt项目的封装,使得Qt应用程序可以使用Pdfium的PDF渲染功能。

它的主要目标是高效的PDF文档渲染,特别是在Web浏览器等高性能需求的应用场景中。相较于Poppler,Pdfium侧重于简洁、高效的渲染和性能优化。

本文主要介绍 QtPdfium 的使用。

环境:

QT5.15.2 + MSVC2019 + Qwidget

二、下载 QtPdfium

方法一:

GitHub 下载 QtPdfium,https://github.com/paulovap/qtpdfium

方法二:

Gitee 上其它大佬编译的,https://gitee.com/Qwyi/QtPdfium_Build_Source

  • qtpdfiumBuild: 为基于Qt 5.12.11 mingw 64位编译的 qt版本动态和静态库文件,以及头文件,可直接添加使用 - sourceZib: 为原始的可编译的qt-pdfium 源代码压缩包文件 - src: 为编译时需要的源码文件 - winLibs: 为编译时需要使用的windows 库文件,包括x32和x64位库,目前编译的采用x64位库

三、加载 QtPdfium 动态库

博主使用的 Qt 5.15.2 不能编译成功,但是生成的dll、bin及include也能用;

右键 "pdfium" 构建,及 qmake

在" build " 文件夹下,lib 文件有 :

取图中四个文件

再取 QtPdfium_Build_Source-master\qtpdfiumBuild 下的 include

将上述文件拷贝到工程文件下后目录结构:

qpdfium

├── include

│ ├── qpdfium.h

│ ├── qpdfiumglobal.h

│ ├── qpdfiumpage.h

├── libs

│ ├── Qt5Pdfium.dll

│ ├── Qt5Pdfium.lib

│ ├── Qt5Pdfiumd.dll

│ ├── Qt5Pdfiumd.lib

使用外部库添加:

手动添加更加方便:

注意 debug 与 release 的区别,这个很重要

四、Demo 使用

参考:https://github.com/paulovap/qtpdfium Readme

要加载PDF文件,只需执行以下操作:

cpp 复制代码
#include <QtPdfium/QPdfium>

QPdfium pdf("mypdf.pdf");
qDebug() << pdf.isValid(); //should return true

使用 QPdfium::pageCount() 获得页面数。

通过索引访问页面:

cpp 复制代码
#include <QtPdfium/QPdfium>

QPdfium pdf("mypdf.pdf");
QPdfiumPage page =  pdf.page(0);
qDebug() << page.width(); // should show something!

生成图像:

cpp 复制代码
#include <QtPdfium/QPdfium>

QPdfium pdf("mypdf.pdf");
QPdfiumPage page =  pdf.page(0);
QImage image = page.image(3); //renders it 3 times bigger

//QPixmap 是 Qt 框架中的一个类,用于处理图像的显示。它通常用于将图像显示在控件上,如 QLabel、QPushButton 等
//我们可以利用QPixmap 将图像显示在 label上的。
label->setPixmap(QPixmap::fromImage(image));

提取文本:

cpp 复制代码
#include <QtPdfium/QPdfium>

QPdfium pdf("mypdf.pdf");
QPdfiumPage page =  pdf.page(0);
QString pageText = page.text();

注意:

使用 QtPdfium 偶尔无法读中文路径的PDF,不知道是不是库本身的问题;

参考:

qt 使用qtpdfium实现读取pdf文件


商务合作请加我: 19976699725

关于QT Widget 其它文章请点击这里: QT Widget

相关推荐
七月pro7 分钟前
前端通过 jspdf 和 html2canvas 工具将网页生成 pdf
javascript·pdf
强里秋千墙外道2 小时前
【Qt】Qt+Visual Studio 2022环境开发
开发语言·qt·visual studio
coder_Alaric5 小时前
[笔记]Qt下使用SendMessage、PostMessage和接收window消息
笔记·qt
鲁班相信爱情5 小时前
QT中静态变量无法翻译的问题
开发语言·qt
横冲直撞de5 小时前
客户端(浏览器)vue3本地预览txt,doc,docx,pptx,pdf,xlsx,csv,
开发语言·javascript·pdf
ymchuangke6 小时前
Pyside6 --Qt设计师--简单了解各个控件的作用之:Item Views
python·qt·ui·pyside6
淼淼7636 小时前
qt中tr的使用
开发语言·qt
雅典没有娜7 小时前
QT/C++与LUA交互过程中,利用ZeroBraneStudio对LUA脚本进行仿真调试
c++·qt·lua·调试·仿真·zerobranestudio
小灰灰搞电子8 小时前
QT使用HTTP上传json格式数据源码分享
qt·http·json