qtpdfium的编译及读取pdf文件和一些简单操作
qtpdfium是谷歌的一款开源项目,它的内核是基于国内的福昕pdf,许可协议为 BSD 3-Clause,允许用于闭源商业行为
下载
我们可以从git上进行下载,github,如果嫌下载速度慢,可以从csdn进行下载csdn
下载完成之后我们可以看到有一份压缩文件。

编译
我们将下载完成的压缩包拷贝到一个空目录内进行编译
第一步,我们把压缩包进行解压,得到一个文件夹。
第二步,打开文件夹,打开pro文件

这里我们使用qtcreator进行打开,当然也可以使用vs进行打开。
使用qtcreator打开,会看到让你选择编译器界面,这个就是代表你需要编译哪个编译器下的库,不同编译器编译出来的库不能进行互通,也就是调用会报错哦。我这里使用的是qt5.15.2和msvc2019版本,所以我编译器选择的是 qt5.15.2 mscv2019 64

根据自己所需情况编译不同版本。最好是将shadow build勾选掉,这样编译出来的文件会在当前目录下,不然会编译到qt帮你创建的目录下。
第三步 点击编辑,选择到pdfium,点击编译

右击,选择构建,等待编译完成即可,最好是把debug和release都编译下。
第四步 编译完成之后,打开压缩的文件夹,可以看到有一个lib文件夹

点进去可以看到编译好的lib文件,我是debug和release都编译了

在项目中使用
我们只需要这2个文件,如果只编译debug或relese,只拿一个就行,把这2个文件拷贝出来
放到我们的项目目录下
注意:我们还需要头文件,打开QtPdfium_Build_Source-master文件夹

打开这个文件夹

将include文件夹拷贝到项目路径下。

然后我们打开我们的项目,以qtCreator为例,打开pro文件

加入这句话,$$PWD代表项目当前路径,你们在使用的时候换成自己的include路径即可,include存放的是头文件。
右击项目,选择添加库,选择外部库


将linux和mac勾选掉,选择windows,点击浏览库文件,选择lib文件,就是刚刚编译完成的lib文件
选择完成后会在pro文件内生成

使用就很简单了
首先加入头文件
#include "qpdfium.h"QPdfium m_pdf;
m_pdf.loadFile(i_path); //path为pdf路径
int pagenumber = m_pdf.pageCount();if(pagenumber<=0)return;for (int i= 0;i<pagenumber;i++) {QPdfiumPage page = m_pdf.page(i); //读取每一页pdfQImage image = page .image(1.0); //将pdf转化为Qimage,后面的1.0代表显示比例}
可以看到这个库只是将pdf以图片的形式送给你,剩下的就是看你如何对图片操作,对了,我看了一下QPdfiumPage 的方法,他是支持读取pdf每一页的文字的,这个对划词很有帮助。
下面是我写的一个例子。我是以一页一页的方式进行显示的,支持翻页,可缩放。跳页的功能还没有完善。
代码
相关文章:
qtpdfium的编译及读取pdf文件和一些简单操作
qtpdfium是谷歌的一款开源项目,它的内核是基于国内的福昕pdf,许可协议为 BSD 3-Clause,允许用于闭源商业行为 下载 我们可以从git上进行下载,github,如果嫌下载速度慢,可以从csdn进行下载csdn 下载完成之…...
ClickHouse查看执行计划
在clickhouse 20.6版本之前要查看SQL语句的执行计划需要设置日志级别为trace才能可以看到,并且只能真正执行sql,在执行日志里面查看。在20.6版本引入了原生的执行计划的语法。在20.6.3版本成为正式版本的功能。 本文档基于目前较新稳定版21.7.3.14。 1.基…...
2023-11-17 VsCode使用makefile进行多文件编译
点击 <C 语言编程核心突破> 快速C语言入门 VsCode使用makefile进行多文件编译 前言一、一个简单的多文件示例二、makefile基本语法三、VsCode使用makefile总结 前言 要解决问题: C或C可以多文件编译, 意味着需要进行代码组织, 为了方便多文件编译, gnu开发了make工具, …...
Network(四)NAT实现方式与VRRP概述
一 NAT 1 NAT概述 (1)NAT的作用 Network Address Translation,网络地址转换 通过将内部网络的私有IP地址转换成全球唯一的公网IP地址使内部网络可以连接到互联网。 (2)私有IP地址分类 A类10.0.0.0~10.255.255.…...
C#_键盘钩子
一、class class KeyboardHook{public event KeyEventHandler KeyDownEvent;public event KeyPressEventHandler KeyPressEvent;public event KeyEventHandler KeyUpEvent;public delegate int HookProc(int nCode, Int32 wParam, IntPtr lParam);static int hKeyboardHook 0;…...
YOLO免费数据集网站收集
目录 Roboflow Universe: Open Source Computer Vision Community Find Open Datasets and Machine Learning Projects | Kaggle 编辑 【火焰和烟雾图像数据集】-计算机视觉数据集-极市开发者平台 (cvmart.net) 开放数据集- 飞桨AI Studio星河社区 - 人工智能学习与实训社…...
拼图小游戏
package li;import ui.tu; //启动类 public class 主 {public static void main(String[] args) {new tu(); //创建登陆界面} }package ui;import javax.swing.*; import javax.swing.border.BevelBorder; import java.awt.event.ActionEvent; import java.awt.event.ActionLi…...
卷积神经网络(CNN)天气识别
文章目录 前期工作1. 设置GPU(如果使用的是CPU可以忽略这步)我的环境: 2. 导入数据3. 查看数据 二、数据预处理1. 加载数据2. 可视化数据3. 再次检查数据4. 配置数据集 三、构建CNN网络四、编译五、训练模型六、模型评估 前期工作 1. 设置GP…...
Linux进程间通信之匿名管道
文章目录 为什么要有进程间通信pipe函数共享管道原理管道特点管道的四种情况 管道的应用场景(进程池)ProcessPool.ccTask.hpp 为什么要有进程间通信 数据传输:一个进程需要将它的数据发送给另一个进程 资源共享:多个进程之间共享…...
【PTA题目】6-19 使用函数输出指定范围内的Fibonacci数 分数 20
6-19 使用函数输出指定范围内的Fibonacci数 分数 20 全屏浏览题目 切换布局 作者 C课程组 单位 浙江大学 本题要求实现一个计算Fibonacci数的简单函数,并利用其实现另一个函数,输出两正整数m和n(0<m≤n≤10000)之间的所有F…...
运行ps显示msvcp140.dll丢失怎么恢复?msvcp140.dll快速解决的4个不同方法
msvcp140.dll无法继续执行代码的主要原因有以下几点 系统缺失:msvcp140.dll是Visual Studio 2015编译的程序默认的库文件,如果系统中没有这个库文件,那么在运行相关程序时就会出现找不到msvcp140.dll的错误提示。 文件损坏:如果…...
Java多线程(3)
Java多线程(3) 深入剖析Java线程的生命周期,探秘JVM的线程状态! 线程的生命周期 Java 线程的生命周期主要包括五个阶段:新建、就绪、运行、阻塞和销毁。 **新建(New):**线程对象通过 new 关键字创建&…...
Java线程周期
Java线程的生命周期包含以下状态: 新建(New):当一个线程被创建但还没有被启动时,它的状态是新建。就绪(Runnable):当线程已经被启动并且没有任何阻止它立即运行的条件时,…...
map与set的封装
目录 红黑树的结点 与 红黑树的迭代器 红黑树的实现: 迭代器: 编辑 红黑树的查找: 红黑树的插入: 编辑 检查红色结点:编辑红黑树的左旋 编辑红黑树的右旋 编辑红黑树的双旋 Map的封装 编辑set的…...
mac无法向移动硬盘拷贝文件怎么解决?不能读取移动硬盘文件怎么解决
有时候我们在使用mac的时候,会遇到一些问题,比如无法向移动硬盘拷贝文件或者不能读取移动硬盘文件。这些问题会给我们的工作和生活带来不便,所以我们需要找到原因和解决办法。本文将为你介绍mac无法向移动硬盘拷贝文件怎么回事,以…...
基于Netty实现的简单聊天服务组件
目录 基于Netty实现的简单聊天服务组件效果展示技术选型:功能分析聊天服务基础设施配置(基于Netty)定义组件基础的配置(ChatProperties)定义聊天服务类(ChatServer)定义聊天服务配置初始化类&am…...
视频封面:从视频中提取封面,轻松制作吸引人的视频
在当今的数字时代,视频已成为人们获取信息、娱乐和交流的重要方式。一个吸引人的视频封面往往能抓住眼球,提高点击率和观看率。今天将介绍如何从视频中提取封面,轻松制作吸引人的视频封面。 一、准备素材选择合适的视频片段 首先࿰…...
CICD 持续集成与持续交付——gitlab
部署 虚拟机最小需求:4G内存 4核cpu 下载:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/ 安装依赖性 [rootcicd1 ~]# yum install -y curl policycoreutils-python openssh-server perl[rootcicd1 ~]# yum install -y gitlab-ce-15.9.3-ce.0…...
Linux - 驱动开发 - RNG框架
说明 公司SOC上有一个新思的真随机数(TRNG)模块,Linux平台上需要提供接口给外部使用。早期方式是提供一个独立的TRNG驱动,实现比较简单的,但是使用方式不open,为了加入Linux生态环境,对接linux…...
qsort使用举例和qsort函数的模拟实现
qsort使用举例 qsort是C语言中的一个标准库函数,用于对数组或者其他数据结构中的元素进行排序。它的原型如下: void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)); 我们可以去官网搜来看一看:…...
QuickDraw MediaPipe手势识别:无需画笔的手势控制绘画应用
QuickDraw MediaPipe手势识别:无需画笔的手势控制绘画应用 【免费下载链接】QuickDraw Implementation of Quickdraw - an online game developed by Google 项目地址: https://gitcode.com/gh_mirrors/qu/QuickDraw QuickDraw MediaPipe手势识别是一款创新…...
云厂商认证的价值变迁:从AWS到阿里云,哪个含金量更高?
当测试工程师开始关注云认证过去十年,软件测试领域的认证风向悄然生变。十年前,测试工程师手中的王牌是ISTQB(国际软件测试资格委员会)基础级或高级证书,这份全球通用的“测试护照”足以敲开大多数企业的大门。然而&am…...
CSS盒模型完全指南
CSS盒模型完全指南 引言 CSS盒模型是理解CSS布局的基础,每个HTML元素都可以看作一个矩形盒子。本文将深入探讨盒模型的核心概念、使用方法和最佳实践。 一、盒模型基础 1.1 盒模型组成 .element {width: 300px;height: 200px;padding: 20px;border: 5px solid #333;…...
Week1:机器学习入门
Week1:机器学习入门摘要:本周完成李宏毅《机器学习》课程第 1 讲的入门学习,建立对机器学习的整体认知。首先梳理了人工智能、机器学习与深度学习的层级关系,剖析了传统 “人工设定规则” 方法的局限性;在此基础上&…...
Wireshark与Fiddler联手解密HTTPS流量实战指南
1. 为什么单靠Wireshark看不了真正的HTTPS请求内容?你有没有试过在Wireshark里抓到一堆TLSv1.3的Encrypted Handshake Message,点开Application Data全是乱码,连自己发的登录请求里用户名填的是“admin”还是“test123”都看不到?…...
GASShooter伤害计算与GameplayEffectContext:自定义伤害类型与爆头机制终极指南 [特殊字符]
GASShooter伤害计算与GameplayEffectContext:自定义伤害类型与爆头机制终极指南 🎯 【免费下载链接】GASShooter Advanced FPS/TPS Sample Project for Unreal Engine 4s GameplayAbilitySystem plugin 项目地址: https://gitcode.com/gh_mirrors/ga/G…...
告别误报!用SCTransNet+Transformer搞定红外小目标检测(附PyTorch实战代码)
突破红外小目标检测瓶颈:SCTransNet与Transformer的实战融合在安防监控、遥感测绘和军事预警等关键领域,红外小目标检测技术正面临前所未有的挑战。当目标尺寸小于1010像素、信噪比低于2dB时,传统算法在复杂背景下的误报率往往高达30%以上。这…...
量子机器学习实战:遥感图像分割的混合模型构建与硬件噪声影响分析
1. 项目概述与核心挑战量子机器学习(QML)这个领域,听起来像是科幻小说里的概念,但过去几年,它已经从理论物理的殿堂,逐渐走进了我们这些做工程和算法应用的人的视野。简单来说,它试图用量子计算…...
为什么选择 Telerik UI for UWP?10个理由让你的Windows应用开发效率倍增
为什么选择 Telerik UI for UWP?10个理由让你的Windows应用开发效率倍增 【免费下载链接】UI-For-UWP Telerik UI for Universal Windows Platform (UWP) is no longer supported. 项目地址: https://gitcode.com/gh_mirrors/ui/UI-For-UWP 如果你正在开发Wi…...
HHEML:基于FPGA硬件加速的边缘隐私保护机器学习框架
1. 项目概述:当边缘计算遇上隐私保护,一场硬件加速的革新在医疗影像分析、智能门禁、工业质检这些场景里,你肯定不希望自己的X光片、人脸数据或者生产线上的瑕疵图片,在传到云端服务器做AI推理时,被“有心人”看个精光…...
