背景:
最近的項目需要自動的生成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.
好了,今天就寫到這里了,接下來取研究如何使用這個庫。