前言:这一阵子都在研究qt下显示office和pdf相关方案,需求大致为从ftp上下载office或者pdf等文件,客户端界面上直接显示。大致分为这三个策略:上策直接像web端那样,直接将office诸如ppt,word,excel等直接嵌入过去,但不能让用户编辑和另存为;中策显示pdf,一样不能编辑不能复制另存为;下策就是直接从服务端下载图片,一张张显示(这就太那啥了,坚决不能考虑= =。)。
序
那么这篇先介绍下我的历程,以及开源库的选择等问题。
本系列预计会有以下几篇(每篇写完后会更换成相应url),后期可能会调整(因为懒直接写一块得了),以实际情况为准:
1、
Qt显示pdf系列1——序言,扯淡,选择相关库及方式等
2、
Qt显示pdf系列2——QAxWidget打开Office文件及pdf
3、
Qt显示pdf系列3——配置编译谷歌开源项目pdfium
4、
Qt显示pdf系列4——封装pdfium库为动态库,显示pdf
按照惯例介绍下本次开发环境:windows7+vs2013+vs2015(这是pdfium开源库的时候用到)+qt5.4。
一、尝试显示office:
最开始肯定是想实现上策方案,直接像是web端(比如qq邮箱)预览office文件的效果那样,那就爽歪歪了,然而现实总是残酷的,基本上,显示office方面的资料较少(可以百度google下看看),有的博客甚至写的不清不楚,有的干脆就不能用。
基本上, 所有的资料都指向一个——QAxwidget调用com组件显示office。
于是我去找了github,github上,qt相关的,大致我也看了下,比较合适的基本没有,上图感受下:
这就尴尬了,于是我就用QAxwidget来显示。发现需要安装office,并且其实本质上就是在qt界面上嵌入一个office软件,跟直接打开office文件一毛一样,那我何必嵌入你呢?直接调用进程不得了。。。当然,下篇还是会简单介绍下。
二、尝试打开pdf:
1、尝试打开pdf文件:
那么上策不行,我就只能选择中策了,反正office文件可以转pdf,这个过程不负责,而我需要的就是显示pdf,并且pdf内容格式本身也是开源的,所以估计网上会多一点资料。
嗯,果不其然,资料是多了点,但几乎都是用别的开源库,我搜索了下qt打开pdf文件,找出来的基本上都是通过开源库,诸如:mupdf,poppler等,然而这俩开源库基本很难找到编译好的lib,这就更尴尬了。
于是我又打开github上来搜,情况也不是很乐观,我也都下了下,能顺利使用的也就这个Archie3d/qpdf,但其依赖于webkit,本质上是嵌入一个浏览器在其中,且有诸多bug,最主要的是没法发布,所以也不是很理想。
同时,QAxwidget也可以打开pdf,但依赖于adobe软件,跟之前打开office文件类似,一样另存为,复制等操作没法屏蔽。
最后我搜索c++的pdf开源库,找到了福昕阅读器开源给谷歌的项目pdfium,本质是渲染成bit图片,听起来很符合我的需求啊。
2、选择开源库:
选择,其实上面也说了各项的优劣,pdfium,mupdf,poppler,这些个开源项目,可能是更适合的方式,但是这种开源项目,编译起来真是很费劲,相当折腾,甚至还不一定能编译出来,哎,算是开源项目的一个通病。
但活儿还是要干的,最后选择了谷歌的pdfium,一来很符合需求,二来公司同事也指点了不少,折腾了近一周,前后遇到各种问题(以后会慢慢道来),终于搞定了。
三、总结:
本次编译配置下来,最大的感受有以下几点:
1、c++的开源项目真牛(cao)逼(dan),一(zhe)点(teng)都(si)不(wo)折(le)腾(a),
2、好东西从来都不是免费的,这些核心功能资料都比较少
3、听闻wps是qt写的,嗯,不错。