libharu 源碼編譯 VS2010


最近項目中接過了一個libharu PDF 開源庫的鍋,哈哈。於是就自己編譯了一套libharu 的MFC下的靜態庫和動態庫。

 

編譯libharu需要用到zlib庫和libpng庫,libpng庫又依賴zlib庫。

所以這里我們先編譯zlib庫,使用VS2010

zlib 下載地址:http://www.zlib.net/

libpng下載地址:http://www.libpng.org/pub/png/libpng.html

libharu下載地址:http://libharu.org/

下載如下三個文件:

 

 

一、編譯zlib

這里我們只編譯  USE MFC Shared DLL 下 的lib和dll  字符統一設置Unicode

打開zlib-1.2.8里面的C:\libhpdf\zlib-1.2.8\zlib-1.2.8\contrib\vstudio\vc10\zlibvc.sln文件

設置 MFC Shared DLLUnicode,MDD,DLL生成選項,下面兩個庫也按照這個編譯選項。building zlibvc即可

程序目錄中生成了如下文件zlibwapid.dll和zlibwapid.lib

 

 

二、編譯libpng  編譯選項同zlib

打開C:\libhpdf\lpng1624\lpng1624\projects\vstudio\vstudio.sln

去掉他自己引用的zlib目錄,把$ZlibSrcDir;刪除

自己手動添加zlib庫目錄,包含zlib的頭文件,然后添加剛才生成的zlibwapid.lib目錄,linker輸入 依賴zlibwapid.lib

building  即可編譯出libpng16.dll libpng16.lib,如果報錯,加上zlib的預編譯選項,

_CRT_NONSTDC_NO_DEPRECATE
_CRT_SECURE_NO_DEPRECATE
_CRT_NONSTDC_NO_WARNINGS
ZLIB_WINAPI
ASMV
ASMINF

 

三、編譯libharu 生成libhpdf.dll

新建vs空控制台工程,設置編譯選項,生成exe改成生成dll,編譯選項同上面的一和二。

然后include zlib和libpng的頭文件,include libharu的頭文件,添加libharu的src源代碼, include 生成的zlib的lib 和libpng的lib

linker 輸入 libpng16.lib zlibwapid.lib

導入libharu  win32\include下目錄下的hpdf_config.h文件,並且導入libhpdf.def 文件用於生成lib文件

然后在設置預處理器里面添加zlib的如下編譯選項,否則編譯不通過,

_CRT_NONSTDC_NO_DEPRECATE
_CRT_SECURE_NO_DEPRECATE
_CRT_NONSTDC_NO_WARNINGS
ZLIB_WINAPI
ASMV
ASMINF

最后可能會報錯 HPDF_3DAnnot_Set3DView無法引用的錯誤,將libhpdf.def 中的HPDF_3DAnnot_Set3DView 刪除即可。

 

到此生成結束:

測試代碼:

MFC工程中生成了一個pdf文件。

 

 1 void CTESTLibharuDlg::OnBnClickedOk()  2 {  3 
 4  HPDF_Doc pdf;  5  HPDF_Font font;  6     HPDF_Page szPage[10115];  7  HPDF_REAL tw;  8 
 9     string strPdfContent = "這是一個測試,支持中文"; 10 
11     string strPdfName = "XXX.pdf"; 12 
13     pdf = HPDF_New(error_handler, NULL); 14 
15     if (!pdf) 16  { 17         ::MessageBox(NULL,L"生成pdf錯誤",L"提示",NULL); 18         return ; 19  } 20     //new pdf error,longjmp second parameter is 1, setjmp renturn 1, call HPDF_FREE
21     if (setjmp(env)) 22  { 23  HPDF_Free(pdf); 24         return ; 25  } 26 
27  HPDF_UseCNSFonts(pdf); 28  HPDF_UseCNTFonts(pdf); 29  HPDF_UseCNTEncodings(pdf); 30  HPDF_UseCNSEncodings(pdf); 31 
32     //support Chinese Song (SimSun)and Chinese black (SimHei)
33     font = HPDF_GetFont(pdf, "SimSun", "GBK-EUC-H"); 34 
35     
36     for( int i = 0; i < 10115 ; ++i ) 37  { 38         szPage[i] = HPDF_AddPage(pdf); 39 
40  HPDF_Page_SetSize(szPage[i], HPDF_PAGE_SIZE_LETTER, HPDF_PAGE_PORTRAIT); 41 
42  HPDF_Page_BeginText(szPage[i]); 43 
44         HPDF_Page_SetFontAndSize(szPage[i], font, 20); 45 
46         tw = HPDF_Page_TextWidth(szPage[i], strPdfContent.c_str()); 47 
48         HPDF_Page_MoveTextPos(szPage[i], (HPDF_Page_GetWidth(szPage[i]) - tw) / 2, 49             (HPDF_Page_GetHeight(szPage[i]) - 20 ) / 2); 50 
51  HPDF_Page_ShowText(szPage[i], strPdfContent.c_str()); 52 
53  HPDF_Page_EndText(szPage[i]); 54 
55  } 56 
57  HPDF_SaveToFile(pdf, strPdfName.c_str()); 58  HPDF_Free(pdf); 59     
60     ::MessageBox(NULL,L"生成結束",L" 提示",NULL); 61 }

 


pdf文件預覽,這里生成了1萬多頁的XXX.pdf文件

 

 

 

編譯好的release和debug 的dll和lib下載地址,也有static lib,包含頭文件就能使用。

 

編譯好的庫下載鏈接:http://download.csdn.net/detail/u010085340/9614015

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM