最近项目中接过了一个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文件。

 void CTESTLibharuDlg::OnBnClickedOk()
{ HPDF_Doc pdf;
HPDF_Font font;
HPDF_Page szPage[];
HPDF_REAL tw; string strPdfContent = "这是一个测试,支持中文"; string strPdfName = "XXX.pdf"; pdf = HPDF_New(error_handler, NULL); if (!pdf)
{
::MessageBox(NULL,L"生成pdf错误",L"提示",NULL);
return ;
}
//new pdf error,longjmp second parameter is 1, setjmp renturn 1, call HPDF_FREE
if (setjmp(env))
{
HPDF_Free(pdf);
return ;
} HPDF_UseCNSFonts(pdf);
HPDF_UseCNTFonts(pdf);
HPDF_UseCNTEncodings(pdf);
HPDF_UseCNSEncodings(pdf); //support Chinese Song (SimSun)and Chinese black (SimHei)
font = HPDF_GetFont(pdf, "SimSun", "GBK-EUC-H"); for( int i = ; i < ; ++i )
{
szPage[i] = HPDF_AddPage(pdf); HPDF_Page_SetSize(szPage[i], HPDF_PAGE_SIZE_LETTER, HPDF_PAGE_PORTRAIT); HPDF_Page_BeginText(szPage[i]); HPDF_Page_SetFontAndSize(szPage[i], font, ); tw = HPDF_Page_TextWidth(szPage[i], strPdfContent.c_str()); HPDF_Page_MoveTextPos(szPage[i], (HPDF_Page_GetWidth(szPage[i]) - tw) / ,
(HPDF_Page_GetHeight(szPage[i]) - ) / ); HPDF_Page_ShowText(szPage[i], strPdfContent.c_str()); HPDF_Page_EndText(szPage[i]); } HPDF_SaveToFile(pdf, strPdfName.c_str());
HPDF_Free(pdf); ::MessageBox(NULL,L"生成结束",L" 提示",NULL);
}

pdf文件预览,这里生成了1万多页的XXX.pdf文件

编译好的release和debug 的dll和lib下载地址,也有static lib,包含头文件就能使用。

编译好的库下载链接:http://download.csdn.net/detail/u010085340/9614015

libharu 源码编译 VS2010的更多相关文章

  1. DevExpress 14.2.3源码编译 z

    一.准备 1.准备一台Windows 8.1机器,安装VS2013 2.准备一台Windows 8.1机器,安装VS2010    XP的系统肯定不行,因为有不少的运行库不支持     Windows ...

  2. MongoDB源码编译

    MongoDB源码编译 本人编译的版本编译的版本为mongodb2.6分支,目前MongoDB3.0已经发布,编译步骤和2.6的差不多,不过3.0版本要求编译器支持c++11标准,所以如果是在Linu ...

  3. DevExpress源码编译总结 z

    本篇文章内容包括基础知识(GAC.程序集强签名.友元程序集).编译过程.注册GAC.添加工具箱.多语言支持.运行时和设计时调试 源码地址 链接:http://pan.baidu.com/s/1eQm1 ...

  4. DevExpress源码编译总结

    独家提供完整可编译sln文件,本篇文章内容包括基础知识(GAC.程序集强签名.友元程序集).编译过程.注册GAC.添加工具箱.多语言支持.运行时和设计时调试 源码地址  链接:http://pan.b ...

  5. GDAL源码编译

    转自阿Fai, GDAL源码编译 在这里,我使用源码编译出C#可以使用的dll静态文件. 一.简单的编译 1.简单的认识 首先进入GDAL的源代码目录,可以看到有几个sln为后缀的文件名,比如make ...

  6. Android 5.0源码编译问题

    如果是自己通过repo和git直接从google官网上download的源码,请忽略这个问题,但是由于google在国内被限制登录,通过这一种方法不是每个人都能download下来源码,通常的做法就是 ...

  7. Android stdio Apktool源码编译

    Android Apktool源码编译 标签(空格分隔): Android Apktool 源码编译 需求 习惯NetBeans调试smali需要用Apktool反编译apk,需要用-d的参数才能生成 ...

  8. SSH/SSL 源码编译安装简易操作说明

    环境:CentOS 6.7 安全加固需求,由于某盟扫描系统主机有SSL系列漏洞,客户要求必须修复: 解决方案:将SSH/SSL升级到最新版本,删除SSL旧版本(实测不删除旧版本某盟扫描无法通过). 当 ...

  9. Hadoop源码编译过程

    一.           为什么要编译Hadoop源码 Hadoop是使用Java语言开发的,但是有一些需求和操作并不适合使用java,所以就引入了本地库(Native Libraries)的概念,通 ...

随机推荐

  1. jsp的一些基本语法

    jsp页面内容 <%@ page language="java" import="java.util.*" pageEncoding="UTF- ...

  2. Python进阶08 异常处理

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 本文特别感谢kylinfish的纠正,相关讨论见留言区. 异常处理 在项目开发中, ...

  3. js实现加减乘除

    /** ** 除法函数,用来得到精确的除法结果 ** 说明:javascript的除法结果会有误差,在两个浮点数相除的时候会比较明显.这个函数返回较为精确的除法结果. ** 调用:accDiv(arg ...

  4. C++学习18 派生类的析构函数

    和构造函数类似,析构函数也是不能被继承的. 创建派生类对象时,构造函数的调用顺序和继承顺序相同,先执行基类构造函数,然后再执行派生类的构造函数.但是对于析构函数,调用顺序恰好相反,即先执行派生类的析构 ...

  5. WPF异步调用

    this.Dispatcher.BeginInvoke(new Action(()=> this.textBlock1.Text = DateTime.Now.ToString("HH ...

  6. NFS挂载启动

    NFS挂载启动参数: 1.服务器IP.目录(虚拟机IP和 NFS目录) 2.开发的IP 如下我的开发板设置 ipaddr=192.168.1.17           ① 开发板IP serverip ...

  7. SQL语句的执行计划(oracle表的三种链接方式)

    SQL语句我们写完之后,就是分析其优化,这就要求我们了解到底数据是怎么存储. 首先我们需要了解,表链接的几种方式 nested loop join sort merge join hash join ...

  8. 监控RAC中的临时表空间

    it is from metalink:Note:465840.1 1>Monitor the temp space allocation to make sure each instance ...

  9. Loadrunner 添加windows资源没反应

    使用 LoadRunner Controller 添加Windows资源系统没有反应, 解决办法 : 1.关闭Windows 防火墙 2.若使用的不是本机 1) 首先要启动所监测机器的remote r ...

  10. 删除sqlserver2008日记文件

    use master go alter database dbname set recovery simple with no_wait go alter database dbname set re ...