qt实现打开pdf(阅读器)功能用什么库比较合适

关于这个问题,网上搜一下,可以看到非常多的相关博客和例子,可以先看看这个总结性的博客(https://zhuanlan.zhihu.com/p/480973072)

该博客讲得比较清楚了,这里我再补充一下吧(qt官方也给出了一些答案 Handling PDF - Qt Wiki),根据调研对比,常见的几个库,个人认为如下:

  • mupdf:用的比较多,官网 MuPDF: The ultimate library for managing PDF documents 这玩意用c语言写的,可以说加载解析速度非常快了,而且网上也有人提供了qt版封装接口,叫做 mupdf-qt。好像需要自己编译成库一下,依赖一些外部库,编译时候有点儿难度。
  • proppler:官网也用得比较多,可以说是最多的了,也有第三方qt版接口,但是一些博客例子看来其清晰度以及加载速度以及编译难度都不太好,但是功能应该挺强的吧,api用起来也挺方便。实例 QT使用Poppler库来完成阅读PDF文件-CSDN博客, 十、Qt 操作PDF文件_qt pdf-CSDN博客。还有个xpdf库,proppler就是基于它的,xpdf而且好像可以直接编译后是一个成熟的demo阅读器了。好像是渲染为图片了,因此搜索等功能都无法实现,这样就不太好,例如Qt 使用Poppler实现pdf阅读器_qt使用poppler实现pdf-CSDN博客。这个Poppler Win32 download | SourceForge.net 是编译好的32位mingw的库,也是可以直接用的。
  • pdfium:来自于福昕,Google与其合作最终进行了开源,加载速度以及功能都挺强大的,有个第三方qt封装库qpdfium用得也很多,资料和例子也很多 qt 使用qtpdfium实现读取pdf文件_qt读取pdf-CSDN博客。
  • qtpdf:就是官方亲自对pdfium进行的封装,应该算是正统的qpdfium接口了,但是使用需要进行配置一下,【QT】 QT开发PDF阅读器_qt实现pdf阅读-CSDN博客,QT自带PDF库的使用_qpdfdocument-CSDN博客,QT自带PDF库使用方法_qtpdf-CSDN博客,Qt 中文文档 Qt5.15 PDF Class (从官网Qt 5.15 翻译)_qt中文文档-CSDN博客
  • qpdf:其实封装了 pdf.js库,使用 WebEngine来执行 JavaScript进而加载文件,相当于嵌入一个浏览器,太重了,性能这些占用可能较大。
  • podoFo:......等,以及还有很多其它的库 https://zhuanlan.zhihu.com/p/679640192

总的来说,在qt上,应该还是高版本后(5.14以后吧),qt库自带的 qtpdf库用起来最简单方便好用,也能兼顾各种性能以及qt编码风格使用习惯什么的了 ,毕竟qt官方亲自封装的这个库,他们也比较推荐这个,qt开发的话应该用起来是首选的吧。但是有个问题:只能用msvc2019及其以上qt版本以及编译器,这个就有点难受了,而自己想要mingw编译器的话,编译就很麻烦了。所以需要自己编译,这里有个人提供了详细信息,真的牛逼 https://blog.51cto.com/u_2194662/5256871,当然这里编译出来了各种形式的库了 QtPdfium_Build_Source: 基于Google pdfium 库,可编译和编译好的Qtpdfium 库,用于加载pdf文件进行预览

,那么我们想编译成mingw版本或者msvc版本都可以了(但是该工程是cmakelist的,如果用qmake,那么参考官方源码工程 https://github.com/qt-labs/qtpdf/tree/dev),真的太牛逼了,当然,也可以用qt官方方法 https://blog.51cto.com/u_2194662/5256871 进行编译,但是mingw应该会报错,所以需要前面这个老哥的修改方式,才能成功。结果如下:

此外,https://github.com/develtar/qt-pdf-viewer-library 这个好像是qt官方商业版搞的编译成的库?没仔细研究了。

值得推荐的开源例子:

  1. proppler实现的阅读器。但是该阅读器不能选中文本,这个比较难受了,印证了上面说的每一页都渲染为了图片了。Qt5使用Poppler实现PDF阅读器_poppler qt 5 是一个用于 qt 的 pdf 渲染库。它可以用来在 qt 应用程序中显示 -CSDN博客

 

看了网上这么多博客,以及自己下载的示例进行实践,发现都是将pdf页渲染为图片的形式显示,导致没法选中,以及查找等操作。要想实现的话,必须要能够支持编辑的一些更强大的库,但是这些库都非常复杂,所以要做这个功能,就要好好想想了  QT中PDF查找和高亮显示。

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

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

相关文章

信息系统项目管理师(项目立项管理)

项目建议书的主要内容包括项目的必要性、项目建设所必须的条件、项目的市场预测、产品方案或服务的市场预测项目评估的依据主要包括:项目建议书及其批准文件、项目可行性研究报告、报送组织的申请报告及主管部门的初审意见、项目关键建设条件和工程等的协议文件、必…

World of Warcraft T2.5

World of Warcraft T2.5 猎人和术士套装需要的材料,好多啊,废墟和神殿打材料 猎人: 术士:

python中类跟实例详解

主要分享一下自己在学习python中关于类和实例的基本概念以及用法,因为在写自动化测试用例的时候会使用类跟方法进行封装,使代码更加的简洁干净,以下是自己的一些学习心得 1.类跟实例的基础概念 类:是抽象的模板,比如动…

【C++题解】1721. 输出个位为5或者个位为8数

问题:1721. 输出个位为5或者个位为8数 类型:简单循环 题目描述: 请从小到大输出 1∼n 中所有个位为 5 或者个位为8 的所有的整数,每行 1 个。 比如,假设 n20,那么满足条件的数输出如下: 5 8 1…

理解MySQL核心技术:外键(Foreign Key)的设计与实现

在日常开发中,数据库是必不可少的部分,而MySQL作为最流行的关系型数据库之一,广泛应用于各类项目中。为了确保数据的完整性和一致性,外键(Foreign Key)无疑是一个重要的概念。在本篇文章中,我们…

Stream Lua Nginx Module 插件一键安装

文章目录 一、场景说明二、脚本职责三、参数说明四、操作示例五、注意事项 一、场景说明 本自动化脚本旨在为提高研发、测试、运维快速部署应用环境而编写。 脚本遵循拿来即用的原则快速完成 CentOS 系统各应用环境部署工作。 统一研发、测试、生产环境的部署模式、部署结构、…

昇思25天学习打卡营第10天|基于MindSpore的GPT2文本摘要

学AI还能赢奖品?每天30分钟,25天打通AI任督二脉 (qq.com) 基于MindSpore的GPT2文本摘要 %%capture captured_output # 实验环境已经预装了mindspore2.2.14,如需更换mindspore版本,可更改下面mindspore的版本号 !pip uninstall m…

如何在LabVIEW中使用FPGA模块

LabVIEW FPGA模块是NI公司推出的一款强大工具,它允许用户使用LabVIEW图形化编程环境来开发FPGA(现场可编程门阵列)应用程序。与传统的HDL(硬件描述语言)编程相比,LabVIEW FPGA模块大大简化了FPGA开发的过程…

Python 语法基础二

7.常用内置函数 执行这个命令可以查看所有内置函数和内置对象(两个下划线) >>>dir(__builtins__) [__class__, __contains__, __delattr__, __delitem__, __dir__, __doc__, __eq__, __format__, __ge__, __getattribute__, __getitem__, __gt…

memcacheredis构建缓存服务器

Memcached&Redis构建缓存服务器 前言 许多Web应用都将数据保存到 RDBMS中,应用服务器从中读取数据并在浏览器中显示。但随着数据量的增大、访问的集中,就会出现RDBMS的负担加重、数据库响应恶化、 网站显示延迟等重大影响。Memcached/redis是高性能…

通过ChatGLM的简单例子体验大模型

【图书推荐】《从零开始大模型开发与微调:基于PyTorch与ChatGLM》_《从零开始大模型开发与微调:基于pytorch与chatglm》-CSDN博客 ChatGLM基于GLM架构,针对中文问答和对话进行了优化。经过约1TB标识符的中英双语训练,辅以监督微调、反馈自助…

Redis-Bitmap位图及其常用命令详解

1.Redis概述 2.Bitmap Bitmap 是 Redis 中的一种数据结构,用于表示位图(bit array)。 它通常用于处理大规模数据集中每个元素的状态,比如用户的在线/离线状态(每个用户对应一个位,表示在线(1&a…

计算机基础(6)——编码与解码-二进制与文本

💗计算机基础系列文章💗 👉🍀计算机基础(1)——计算机的发展史🍀👉🍀计算机基础(2)——冯诺依曼体系结构🍀👉&#x1f34…

Rust 程序设计语言学习——泛型、Trait和生命周期

每一种编程语言都有高效处理重复概念的工具。在 Rust 中其工具之一就是泛型。泛型是具体类型或其他属性的抽象替代。 Trait 定义了某个特定类型拥有可能与其他类型共享的功能。可以通过 Trait 以一种抽象的方式定义共同行为。可以使用 trait bounds 指定泛型是任何拥有特定行为…

Mac excel 同时冻结首行和首列

1. 选择B2窗格 2. 选择视图 3. 选择冻结窗格 最后首行和首列的分割线加粗了就表示成功了

youlai-boot项目的学习(3) 本地redis、MinIO的安装与配置

youlai-boot项目除了使用mysql数据库、还有redis,以及OSS服务,OSS除了云OSS服务,还有自部署的MinIO服务。 前面我们已经安装好了mysql数据库,那么我们来看看本地redis、MinIO服务怎么部署 环境 mac OS, iterm2&#…

C语言力扣刷题8——环形链表——[快慢双指针, 龟兔赛跑]

力扣刷题8——环形链表——[快慢双指针, 龟兔赛跑] 一、博客声明二、题目描述三、解题思路1、思路说明 四、解题代码(附注释) 一、博客声明 找工作逃不过刷题,为了更好的督促自己学习以及理解力扣大佬们的解题思路,开辟这个系列来…

拳打开源SOTA脚踢商业闭源的LI-DiT是怎样炼成的?(商汤/MMLab/上海AI Lab)

文章地址:https://arxiv.org/pdf/2406.11831 仅基于解码器的 Transformer 的大语言模型(LLMs)与 CLIP 和 T5 系列模型相比,已经展示出卓越的文本理解能力。然而,在文本到图像扩散模型中利用当前先进的大语言模型的范例…

中霖教育怎么样?注册会计师考试难吗?

中霖教育:注册会计师(CPA)考试的难度高吗? 对于不同背景的考生来说,注册会计师考试的挑战程度不同。那些有良好基础和充裕准备时间的考生,通过考试的可能性要超过那些从零开始且准备时间有限的人。 据最近…

GPOPS-II教程(5): 月球探测器着陆最优控制问题

文章目录 问题描述GPOPS代码main functioncontinuous functionendpoint function仿真结果 最后 问题描述 参考文献:[1] Meditch J. On the problem of optimal thrust programming for a lunar soft landing[J]. IEEE Transactions on Automatic Control, 1964, 9(4…