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 DLL,Unicode,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