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

news2024/12/18 11:46:33

文章目录

  • 一、简介
  • 二、下载 QtPdfium
  • 三、加载 QtPdfium 动态库
  • 四、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文件,只需执行以下操作:

#include <QtPdfium/QPdfium>

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

使用 QPdfium::pageCount() 获得页面数。
通过索引访问页面:


#include <QtPdfium/QPdfium>

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

生成图像:

#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));


提取文本:

#include <QtPdfium/QPdfium>

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

注意:

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

参考:

qt 使用qtpdfium实现读取pdf文件


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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2261572.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

优选算法——链表

1. 链表常用技巧和操作总结 2. 两数相加 题目链接&#xff1a;2. 两数相加 - 力扣&#xff08;LeetCode&#xff09; 题目展示&#xff1a; 题目分析&#xff1a;本题给的是逆序&#xff0c;其实降低了难度&#xff0c;逆序刚好我们从第一位开始加&#xff0c;算法原理其实就…

[蓝桥杯 2019 国 B] 排列数

目录 前言 题解 思路 疑问 解答 前言 对于本篇文章是站在别人的基础之上来写的&#xff0c;对于这道题作为2019年国赛B组的最难的一题&#xff0c;他的难度肯定是不小的&#xff0c;这道题我再一开始接触的时候连思路都没有&#xff0c;也是看了两三遍别人发的题解&#x…

Spring Boot 3.x:自动配置类加载机制的变化

随着 Spring Boot 3.x 版本的发布&#xff0c;Spring Boot 引入了一些关键的变更。其中最重要的一项变更是 自动配置类的加载机制。在之前的版本中&#xff0c;Spring Boot 使用 spring.factories 文件来管理自动配置类的加载。然而&#xff0c;在 Spring Boot 3.x 中&#xff…

arXiv-2024 | NavAgent:基于多尺度城市街道视图融合的无人机视觉语言导航

作者&#xff1a;Youzhi Liu, Fanglong Yao*, Yuanchang Yue, Guangluan Xu, Xian Sun, Kun Fu 单位&#xff1a;中国科学院大学电子电气与通信工程学院&#xff0c;中国科学院空天信息创新研究院网络信息系统技术重点实验室 原文链接&#xff1a;NavAgent: Multi-scale Urba…

(三)PyQT5+QGIS+python使用经验——解决各版本不兼容问题

一、问题描述 基础环境&#xff1a;Windows10&#xff08;64&#xff09; PyCharm2024 QGIS 3.22。 目的&#xff1a;解决之前python版本多&#xff0c;pyqt5以及QT Designer交互使用存在环境变量冲突矛盾&#xff0c;以及QGIS安装时自带python、pyqt5等问题。 尤其是在QT …

【OpenCV计算机视觉】图像处理——平滑

本篇文章记录我学习【OpenCV】图像处理中关于“平滑”的知识点&#xff0c;希望我的分享对你有所帮助。 目录 一、什么是平滑处理 1、平滑的目的是什么&#xff1f; 2、常见的图像噪声 &#xff08;1&#xff09;椒盐噪声 ​编辑&#xff08;2&#xff09; 高斯噪声 &a…

秒优科技-供应链管理系统 login/doAction SQL注入漏洞复现

0x01 产品简介 秒优科技提供的供应链管理系统,即秒优SCM服装供应链管理系统,是一款专为服装电商企业设计的全方位解决方案。是集款式研发、订单管理、物料管理、生产管理、工艺管理、收发货管理、账单管理、报表管理于一体的服装电商供应链管理解决方案。它涵盖了从企划到开…

快速掌握源码部署Filebeat

文章目录 1. 裸金属安装1.1 压缩包方式安装1.2 yum方式安装 2. docker安装3. K8s安装 项目使用了Filebeat&#xff0c;现在需要运行在ARM架构的服务器上&#xff0c;但是Filebeat官方没有提供&#xff0c;需要自己编译一份 filebeat等组件的源码地址 https://github.com/elasti…

ST-Linker V2 烧录器详解说明文档

目录 ST-Linker v2烧录器介绍 STM8烧录口 STM32烧录接口 JTAG烧录接口 ​​​​​​​ ​​​​​​​ ​​​​​​​ 编写不易&#xff0c;仅供学习&#xff0c;请勿搬运&#xff0c;感谢理解 ST-Linker v2烧录器介绍 图片中是两种IC芯片的烧录器&#x…

同三维TL201H2S4 4+2机手术互动录播主机产品

同三维TL201H2S4 42机手术互动录播主机产品 录制点播、直播导播、互动、音频处理器、中控等多功能为一体 6路视频输入:4路SDI1路HDMI1(4K30)1路(3选1:HDMI2/2路VGA) 2路视频输出&#xff1a;1路HDMI1(4K30)1路&#xff08;2选1&#xff1a;VGA和HDMI2) 5路音频输入&#xf…

RabbitMQ实现网络分区

RabbitMQ实现网络分区 网络分区的判断应答时间范围判定方式日志方式命令查看监控页面提示API查看 模拟网络分区封禁端口封禁IP封禁网卡挂起恢复操作系统 网络分区的影响未配置镜像队列情况下已配置镜像队列情况下 处理网络分区手动处理恢复步骤挑选信任分区重启方式&#xff08…

一、LRU缓存

LRU缓存 1.LRU缓存介绍2.LRU缓存实现3.LRU缓存总结3.1 LRU 缓存的应用3.2 LRU 缓存的优缺点 1.LRU缓存介绍 LRU是Least Recently Used 的缩写&#xff0c;意为“最近最少使用”。它是一种常见的缓存淘汰策略&#xff0c;用于在缓存容量有限时&#xff0c;决定哪些数据需要被删…

【大前端vue:组件】鼠标上移 出现动画

【大前端vue&#xff1a;组件】鼠标上移 出现动画 <template><div class"view-introduction-culture"><div class"culture-wrapper"><h2 class"culture-title">鼠标上移&#xff1a;展示动画 显示出来</h2><di…

解决电脑网速慢问题:硬件检查与软件设置指南

电脑网速慢是许多用户在使用过程中常见的问题&#xff0c;它不仅会降低工作效率&#xff0c;还可能影响娱乐体验。导致电脑网速慢的原因多种多样&#xff0c;包括硬件问题、软件设置和网络环境等。本文将从不同角度分析这些原因&#xff0c;并提供提高电脑网速的方法。 一、检查…

快速本地化部署 OnlyOffice服务 ( Linux+Docker)

文章目录 一、OnlyOffice介绍&#x1f4d6;二、集成OnlyOffice&#x1f9e9;2.1 环境准备&#x1f5a5;️2.2 搜索镜像2.3 拉取镜像2.4 查看镜像2.5 创建容器2.6 进入容器配置2.7 重启服务2.8 添加字体字号2.9 测试OnlyOffice服务 三、在线预览office文档四、Cpolar内网穿透 一…

Leecode刷题C++之形成目标字符串需要的最少字符串数①

执行结果:通过 执行用时和内存消耗如下&#xff1a; 代码如下&#xff1a; class Solution { public:int minValidStrings(vector<string>& words, string target) {auto prefix_function [](const string& word, const string& target) -> vector<…

51c嵌入式~合集2

我自己的原文哦~ https://blog.51cto.com/whaosoft/11529950 一、不同的电平信号的MCU怎么通信 “电平转换”电路 ​ 先说一说这个电路的用途&#xff1a;当两个MCU在不同的工作电压下工作&#xff08;如MCU1 工作电压5V&#xff1b;MCU2 工作电压3.3V&#xff09;&#xf…

2024年第十五届蓝桥杯青少组C++国赛—割点

割点 题目描述 一张棋盘由n行 m 列的网格矩阵组成&#xff0c;每个网格中最多放一颗棋子。当前棋盘上已有若干棋子。所有水平方向或竖直方向上相邻的棋子属于同一连通块。 现给定棋盘上所有棋子的位置&#xff0c;如果要使棋盘上出现两个及以上的棋子连通块&#xff0c;请问…

Java线程池解读

Java 线程池是一个提供多线程管理和调度的工具&#xff0c;通常用来处理多个并发任务。线程池能够帮助有效管理线程的创建、调度、执行和销毁&#xff0c;避免频繁的线程创建和销毁&#xff0c;提高系统性能。 前言 Java 线程池是面试中的常客&#xff0c;面试官经常会问线程…

如何为IntelliJ IDEA配置JVM参数

在使用IntelliJ IDEA进行Java开发时&#xff0c;合理配置JVM参数对于优化项目性能和资源管理至关重要。IntelliJ IDEA提供了两种方便的方式来设置JVM参数&#xff0c;以确保你的应用程序能够在最佳状态下运行。本文将详细介绍这两种方法&#xff1a;通过工具栏编辑配置和通过服…