Windows上编译poppler的方法在网上一搜一大堆,实测没遇到一个好用的。为了让后来者少踩坑,我记下这个编译过程,供后来者参考,希望能节约你一些时间。
此法实测E文Windows,Edition: Windows 10 Pro, Version: 2H2 Build: 19042.572 上OK。实测虚拟机上Win7 Ultimate Sp1 64位上也OK。实测虚拟机上Windows XP Pro, Sp2 32位上编译能成功,但结果不可用。如果你仍在用Windows XP,这个方法不适合你,因此没有必要继续浏览此文,那样只会浪费你时间。
免费的SDK解析PDF文件可选的有Poppler, MuPDF, PDFium等,三者中最后一个Apache协议,最宽松,Bug也最少,是最佳之选,只可惜在土鳖国下载谷歌的东西很困难,github上倒是有镜像和编译工具,老旧还不说,而且文件残缺不全,根本编译不过去,搭梯子的做法显然不属于这里所述。MuPDF要么购买要么AGPL协议,对于我而言不能用,最后只剩下Poppler可选,尽管Bug无数,但是GPL协议,而且获取容易,进程间通信依旧可以商用。当然,如果不是商用,就不需要在乎版权,那就MuPDF最好。
安装poppler最简单的办法就是通过msys2(可能cygwin也行),先把msys2 [选64位] 装上,再把开发工具系列以及poppler的依赖(cairo, iconv, glib, boost, lcms2, zlib, png, tiff, jpeg等等很多)都装上,如果用QT也得装QT,用GTK就得装GTK。其实msys2里面就有poppler了(mingw编译的版本),装上就行。但是如果需要特定环境使用,比如Visual Studio,或者觉得msys2里的poppler版本不好用[我测试觉得它不太好用],那就得自己编译。安装msys2和开发环境的方法网上一搜一大堆,这里就不罗嗦了。
固然不排除有人勇气可嘉,想独立编译poppler试试,我不是在此泼冷水,poppler依赖几十个dll,把这些依赖找全自己独立编译的想法根本不现实,因为编译依赖时还需要一大堆别的依赖,由于网络原因很难都顺利下载下来,即使都下载下来,编译方法各式各样,有些用常规方法根本就编译不过。我曾经编译过Poppler 0.59版就用的这个套路,最后不得不修改了很多源代码才编译成功,得到一个可用的版本。想到编译的艰辛过程,poppler 0.59版我用了一年没升级...
装完了msys2把编译器MinGW和make(可能是mingw32-make)加到PATH路径里,一般是***/mingw64/bin
接下来把CMake装上,可在这里下载https://cmake.org/files/
把Poppler下载下来,地址https://poppler.freedesktop.org/ 注意别忘了字体,因此poppler-data也需要,在安装完poppler再装它
编译poppler可用Visual Studio或者mingw[前面msys2里装了],前者需要vcpkg用power shell命令编译,由于有一堆依赖的库,vcpkg编译前需要逐个下载那些依赖再编译,这个套路理论上没问题,但实际操作起来很难成功,这跟前面想独立编译poppler的想法如出一辙,因为有些依赖的库太难下载[也许因为我这里网络太糟?]。配合msys2安装依赖,用mingw编译poppler要容易的太多。
较新的poppler只能编译64位版本可用,如果想编译32位poppler也能成功,但编译完没法在32位系统上用,因为依赖的库有些在32位系统下无法运行,即使在32位系统上编译出32位的poppler也用不了,我在虚拟机上测试过多次,这样看来,曾经流行但老旧的32位Windows Xp上就没法用poppler了。
下载poppler源码后解压(可用7-Zip),然后打开cmake-gui选择源代码路径和存放的目标文件夹编译就行了。如果希望出现.lib别忘了勾选CMAKE_GNUtoMS选项,编译最好指定Release版,否则默认编译的Debug版体积巨大,安装路径里不能有空格,因为安装时需要ming32-make[有人见过mingw64-make吗?],它不支持路径里有空格。如果硬件不是骨灰级,编译时可开启多任务,我用的电脑CPU是i7-8700,直接命令行mingw32-make –j12编译需要几分钟的样子
下面不要选Visual Studio ***,应该选MinGW Makefiles
需要哪些选项勾选上,Configure失败的回到前面msys2里装上再重来,这个过程可能需要往复多次。
编译前最好指定Release版,如果不用手工指定,会默认编译Debug版,那样编译出的dll体积巨大!
如果前面勾选了CMAKE_GNUtoMS,编译中还会用到Visual Studio,而且编译器版本不能太低。
编译完用命令装mingw32-make install,会装到前面指定的路径c:/poppler/vc下,接下来再安装poppler-data
套路一样,由于它不需要依赖,要容易很多。
由于我不用Visual Studio,因此CMAKE_GNUtoMS勾选后编译的结果在Visual Studio下是否能用没测试过,不过
不勾选该项时用MinGW编译的版本是没有任何问题的,我用poppler解析PDF文件做比对工具就用上述方法编译的。
http://www.cppblog.com/Chipset/archive/2020/10/23/217487.html