文章目录
- 一、简介
- [二、下载 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查看和处理功能。而我们为了更好的兼容性,一般采用 Poppler 或 QtPdfium 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,不知道是不是库本身的问题;
参考:
商务合作请加我: 19976699725
关于QT Widget 其它文章请点击这里: QT Widget