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

news/2024/7/8 12:07:54 标签: pdf, qt

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

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

  • mupdf用的比较多,官网 MuPDF: The ultimate library for managing PDF documents 这玩意用c语言写的,可以说加载解析速度非常快了,而且网上也有人提供了qt版封装接口,叫做 mupdf-qt。好像需要自己编译成库一下,依赖一些外部库,编译时候有点儿难度。网上下的例子用msvc也是可以直接编译过的(mingw直接编不过),但是加载pdf速度明显较pdfium太慢了(对比一个528页pdf)。
  • proppler:官网也用得比较多,可以说是最多的了,也有第三方qt版接口,但是一些博客例子看来其清晰度以及加载速度以及编译难度都不太好(不会,这个库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的库,也是可以直接用的。看了一下这个例子(Qt5使用Poppler实现PDF阅读器_poppler qt 5 是一个用于 qtpdf 渲染库。它可以用来在 qt 应用程序中显示 -CSDN博客),mingw可以直接编译运行,发现渲染速度极其的快,比qpdfium还要快,而且它的库qt形式封装得最全,搜索函数这些都给封装上了的。因为proppler的官方对qt进行了封装的,所以完全有最好的封装实现了呀,跟那个qsci编辑器库一样的,网上能搜到巨多的博客,所以放心用吧官方文档非常给力:Poppler Qt5: The Poppler Qt5 interface library

  • pdfium:来自于福昕,Google与其合作最终进行了开源,加载速度以及功能都挺强大的,有个第三方qt封装库qpdfium用得也很多(这个和下面得qtpdf不是一套接口,这个仅仅封装了几个接口而已,有用的是text()函数(获取当前页的文本)仅此而已,但是如果希望实现更多功能例如选中、查找等将需要研究底层pdfium的实现了,还有书签等也没有实现,库太大了非常非常困难,而且作者自己也说了没实现这些功能,而且好几年前已经停止更新了,当然还有其它作者页进行了封装,总体还是就那样吧GitHub - CaSchmidt/csPDF: PDF rendering library based on Qt and PDFium.),资料和例子也很多。github搜索“qt pdf”前几名那个就是GitHub - paulovap/qtpdfium: Pdf Redening on Qt,下载下来msvc直接可以编译,但是mingw编译无法通过,需要进行修改,首先将工程提供的那几个库gid32.lib等都换成mingw下的库,其次好几个文件修改加上语句#ifdef GetObject #undef GetObject #endif(具体看博客QtPdfium编译_qtpdf编译-CSDN博客)。
    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博客。这里有几个注意一下:虽然qt5.14版本后带了该模块,但是是跟QWebengine放一块的,而且只能是msvc版qt才能用(高版本6.x几已经增强了该pdf功能,加了一些接口了更好用了),想mingw用的话,只能自己编译,看这个博客 https://blog.51cto.com/u_2194662/5256871 即可。
  • qpdf:其实封装了 pdf.js库,使用 WebEngine来执行 JavaScript进而加载文件,相当于嵌入一个浏览器,太重了,性能这些占用可能较大。实测运行卡顿,只支持msvc编译器(因为qwebengine只支持msvc)github搜索“qt pdf”前几名那个就是。
     
  • podoFo:......等,以及还有很多其它的库 https://zhuanlan.zhihu.com/p/679640192

顺便说一下,https://github.com/develtar/qt-pdf-viewer-library 这个也是一个pdf打开库​,介绍说是对上面qpdf用qml进行的封装,我试了一下流畅很多了,但是技术跨度太大,而且只能msvc编译成功(因为又是嵌入了WebEngine那一套,注意一个编译错误“非类模板弄为类模板”,修改:friend class Singleton;之前加入一句template <class T>即可)​​​​​​。

总的来说,在qt上,应该还是高版本后(5.14以后吧),qt库自带的 qtpdf库用起来最简单方便好用,也能兼顾各种性能以及qt编码风格使用习惯什么的了 ,毕竟qt官方亲自封装的这个库(后面它们应该还会持续封装这个库的,因为接口和功能太多了,目前还封装实现得比较基础),他们也比较推荐这个,qt开发的话应该用起来是首选的吧。上面的qtpdf运行结果如下:

此外,上面的proppler-qt5库也是非常不错的,可以说是最不错的了,因为它qt形式封装得最好(连search这些都封装了),超过目前的qt第三方封装的qtpdfium库以及qt自家封装的qtpdf库了,值得用用。

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


http://www.niftyadmin.cn/n/5537248.html

相关文章

14-11 2024 年的 13 个 AI 趋势

2024 年的 13 个 AI 趋势 人工智能对环境的影响和平人工智能人工智能支持的问题解决和决策针对人工智能公司的诉讼2024 年美国总统大选与人工智能威胁人工智能、网络犯罪和社会工程威胁人工智能治疗孤独与对人工智能的情感依赖人工智能影响者中国争夺人工智能霸主地位人工智能…

红海云签约海新域集团,产业服务运营领军企业加速人力资源数字化转型

北京海新域城市更新集团有限公司&#xff08;以下简称“海新域集团”&#xff09;是北京市海淀国有资产投资集团有限公司一级监管企业&#xff0c;致力于成为国内领先的产业服务运营商。集团积极探索城市和产业升级新模式&#xff0c;通过对老旧、低效等空间载体重新定位规划、…

【PTGui、Pano2VR6、UE4】VR全景拍摄及漫游交互制作操作实例(更新中)

一、基本思路 首先进行VR全景拍摄&#xff0c;获取高质量的全景图像&#xff1b;然后使用PTGui进行图像拼接&#xff0c;确保图像的连续性与准确性&#xff1b;接着利用Pano2VR6进行VR漫游的制作&#xff0c;添加交互元素与多媒体内容&#xff1b;最后进行作品的调试与优化&am…

在Spring Data JPA中使用@Query注解

目录 前言示例简单示例只查询部分字段&#xff0c;映射到一个实体类中只查询部分字段时&#xff0c;也可以使用List<Object[]>接收返回值再复杂一些 前言 在以往写过几篇spring data jpa相关的文章&#xff0c;分别是 Spring Data JPA 使用JpaSpecificationExecutor实现…

note-网络是怎样连接的6 请求到达服务器,响应返回浏览器

助记提要 服务器程序的结构套接字的指代方式MAC模块的接收过程IP模块的接收过程TCP模块处理连接包TCP模块处理数据包TCP模块的断开操作URI转换为实际文件路径URI调用程序Web服务器访问控制响应内容的类型 6章 请求到达服务器&#xff0c;响应返回浏览器 1 服务器概览 在数据…

Flask自定义命令

Flask自定义命令 一、老版Flask自定义命令 Flask 1.x 和 2.x 版本 在Flask的老版本中&#xff0c;可以通过 flask-script 扩展来添加自定义命令。 安装所需库&#xff1a; pip3 install Flask-Script2.0.3 pip3 install flask1.1.4 pip3 install markupsafe1.1.1在 Flask 应…

oracle存储结构-----逻辑存储结构(表空间、段、区、块)

文章目录 oracle存储结构图&#xff08;逻辑存储物理存储&#xff09;oracle逻辑存储结构图逻辑存储结构、表空间、段、区、数据块的关系&#xff1a;1、数据 块&#xff08;block&#xff09;---逻辑存储最小单位2、 数据区&#xff08;extent&#xff09;--存储空间分配和回收…

文件扫描pdf怎么弄?5个简易高效的文件扫描方法

在繁忙的工作中&#xff0c;我们常常需要将纸质文件快速转换为电子文档&#xff0c;以便于编辑、存储或分享。 无论是合同、报告还是笔记&#xff0c;将这些纸质文件转换为Word格式&#xff0c;不仅能提高工作效率&#xff0c;还能确保信息的安全备份。然而&#xff0c;面对市…