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

相关推荐
Larry_Yanan7 小时前
Qt多进程(三)QLocalSocket
开发语言·c++·qt·ui
刺客xs15 小时前
Qt ----- QT线程
开发语言·qt
SunkingYang17 小时前
QT程序如何将事件和消息发送给MFC程序,MFC程序如何接收消息和事件
qt·mfc·消息·事件·通信·通讯·传递
凯子坚持 c19 小时前
Qt 5.14.0 入门框架开发全流程深度解析
开发语言·qt
深蓝海拓19 小时前
PySide6从0开始学习的笔记(十四)创建一个简单的实用UI项目
开发语言·笔记·python·qt·学习·ui·pyqt
这个需求建议不做20 小时前
pdf.js(pdfdist)踩坑workerSrc报错pdf.worker.mjs无法正确获取
开发语言·javascript·pdf
小尧嵌入式20 小时前
Linux网络介绍网络编程和数据库
linux·运维·服务器·网络·数据库·qt·php
坐吃山猪20 小时前
Python之PDF小工具
开发语言·python·pdf
海涛高软21 小时前
Qt中使用QListWidget列表
开发语言·qt
010米粉01021 小时前
Qt之构建方式
qt