• 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:libhpdfzlib-1.2.8zlib-1.2.8contribvstudiovc10zlibvc.sln文件

    设置 MFC Shared DLLUnicode,MDD,DLL生成选项,下面两个库也按照这个编译选项。building zlibvc即可

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

     

    二、编译libpng  编译选项同zlib

    打开C:libhpdflpng1624lpng1624projectsvstudiovstudio.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  win32include下目录下的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

  • 相关阅读:
    redis key全量导出与导出指定前缀的key
    php魔术变量
    搭建高可用mysql系列(2)-- Percona XtraDB Cluster 安装
    搭建高可用mysql系列(1)-- Percona XtraDB Cluster介绍
    memcached迁移方案——记一次memcached session服务的迁移
    php获取两个数组相同的元素(交集)以及比较两个数组中不同的元素(差集)
    PHP运行模式简单总结
    解决osx下 ssh: connect to host localhost port 22: Connection refused
    linux增加自己的可执行目录 $PATH
    macbook下 go 语言的 helloworld
  • 原文地址:https://www.cnblogs.com/Forever-Kenlen-Ja/p/5811063.html
Copyright © 2020-2023  润新知