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

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

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

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

 

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

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