背景:
最近的项目需要自动的生成pdf文件,我在网上查看相关的资料,发现目前比较流行的生成pdf文件的库有两个,一个是libpdf,另一个是libharu。libpdf个人使用时免费的但是商业使用就需要收费了,否则得到的pdf上有水印。有人说libpdf要比libharu好用,因为libharu需要自己编译,但是考虑到节约成本,我想我应该先尝试一下libharu库,然后再做决定。
首先是要编译libharu库,我看了好几篇文章,感觉说的都不很清楚,操作性不强,后来无意间发现了这篇文章(https://blog.csdn.net/zerojava0/article/details/111482470?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_baidulandingword-5&spm=1001.2101.3001.4242),我照着博主说的步骤进行操作,虽然我在操作过程中遇到了博主没有提到的一些问题,但是我还是逐一解决了,最后也编译成功了。
使用工具:
VS2017, cmake-3.11.3
第一步:下载资源:
libharu的编译是需要libpng库的,而libpng是依赖zlib的,所以我们依次安装三个库。
zlib 下载地址:http://www.zlib.net/
libpng下载地址:http://www.libpng.org/pub/png/libpng.html
libharu下载地址:http://libharu.org/
下载下来后为
解压缩后,简化了一下目录名字,就是下面这个样子了。
第二步:编译zlib库
首先在zlib-1.2.11目录下新建一个build文件夹。
然后打开cmake,并设置源文件的路径以及编译文件生成的路径,然后点击一下“Configure”再点击一下“Generate”,下方的对话框中显示了,Configring done和Generating done则表示此步操作顺利完成。
接下来我们来看看buid文件中都生成了哪些文件
就是上面这些文件啦,接下来就是双击上面标注的这个zlib.sln文件,使用我的VS2017打开,然后开始编译
然后可以看到编译出来的文件存放在哪里,当然也可以选择编译模式为Release模式。
第三步:编译libpng库
首先也是要在lpng1637中新建一个build文件夹。然后打开cmake,设置lpng1637路径。点击Configure后弹出错误提示信息。可以看到是因为找不到ZLIB_INCLUDE_DIR和ZLIB_LIBRARY
我们再第一步中已经编译好了zlib库,选择Abvanced,然后在下面设置ZLIB_INCLUDE_DIR和ZLIB_LIBRARY_RELEASE的路径,再次点击Configure和Generate。
成功了,真不错。
然后看一下这次build文件中生成了什么,
然后在lpng1637/build中创建一个zlib文件夹,然后将第二步中生成的zlibd.lib拷贝到zlib文件夹下。
然后双击libpng.sln,使用VS2017打开工程。
右键png,然后选择Properties.
接下来是这样
接下来是这样
接下来是这样
接下来开始编译
编译出现了问题,就是zlib库中找不到zconf.h文件,遇到这样的问题呢,直觉告诉我,首先要查看,工程下面到底有没有这个文件
zconf.h文件确实存在,
看一下zlib.h在哪里,
知道他们的相对位置后,我修改为#include "build/zconf.h",然后重新编译,编译成功。生成了libpng16d.lib
第四步:编译libharu库
上面咱们已经成功编译了,zlib库和png库,同时生成了相应的lib文件,接下来首先在libharu目录下创建两个文件夹,分别命名为libpng和zlib。
然后将刚才编译得到的zlibd.lib拷贝到zlib文件夹下,将libpng16d.lib拷贝到libpng下。如下图所示。
然后使用同样的方法用cmake来编译libharu,成功了。
双击libharu.sln,使用VS2017打开工程。
选择属性
编译成功啦,生成了libhpdfsd.lib.
好了,今天就写到这里了,接下来取研究如何使用这个库。