zoukankan      html  css  js  c++  java
  • LibHaru编译使用

    最近公司准备在PDF方面发力了,我也要行动起来,就找到了LibHaru这个开源库

    编译Libharu需要用到zlib库和libpng库,libpng库又依赖zlib库.

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

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

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

    下载好后,最好放到一个单独的文件夹下,

     进入目录  D:UsersPDFlpngprojectsvisualc71 里面有VS的工程,根据自己的需求编译DLL或者LIb选择不同的编译选项,

    设置libpng工程的zlib头文件路径,zlib工程和上图一样,编译后,生成libpng.lib和zlib.lib,2个静态库。

    为了方便编译Libharu,将zlib和libpng的头文件与静态库,单独存放到各自的include和lib文件夹里。

    修改D:UsersPDFlibharuscriptMakefile.msvc文件,如下图所示的2处

    管理员 运行 “VS2008命令提示” ,

    cd /D D:UsersPDFlibharu

    nmake script/Makefile.msvc

    至此,LibHaru编译完成。

    创建win32命令行工程测试下。

      1 #include <stdlib.h>
      2 #include <stdio.h>
      3 #include <string.h>
      4 #include <setjmp.h>
      5 #include "hpdf.h"
      6 
      7 #ifndef HPDF_NOPNGLIB
      8 
      9 jmp_buf env;
     10 
     11 #ifdef HPDF_DLL
     12 void  __stdcall
     13 #else
     14 void
     15 #endif
     16 error_handler  (HPDF_STATUS   error_no,
     17                 HPDF_STATUS   detail_no,
     18                 void         *user_data)
     19 {
     20     printf ("ERROR: error_no=%04X, detail_no=%u
    ", (HPDF_UINT)error_no,
     21                 (HPDF_UINT)detail_no);
     22     longjmp(env, 1);
     23 }
     24 
     25 void
     26 draw_image (HPDF_Doc     pdf,
     27             const char  *filename,
     28             float        x,
     29             float        y,
     30             const char  *text)
     31 {
     32 #ifdef __WIN32__
     33     const char* FILE_SEPARATOR = "\";
     34 #else
     35     const char* FILE_SEPARATOR = "/";
     36 #endif
     37     char filename1[255];
     38 
     39     HPDF_Page page = HPDF_GetCurrentPage (pdf);
     40     HPDF_Image image;
     41 
     42     strcpy(filename1, "pngsuite");
     43     strcat(filename1, FILE_SEPARATOR);
     44     strcat(filename1, filename);
     45 
     46     image = HPDF_LoadPngImageFromFile (pdf, filename1);
     47 
     48     /* Draw image to the canvas. */
     49     HPDF_Page_DrawImage (page, image, x, y, HPDF_Image_GetWidth (image),
     50                     HPDF_Image_GetHeight (image));
     51 
     52     /* Print the text. */
     53     HPDF_Page_BeginText (page);
     54     HPDF_Page_SetTextLeading (page, 16);
     55     HPDF_Page_MoveTextPos (page, x, y);
     56     HPDF_Page_ShowTextNextLine (page, filename);
     57     HPDF_Page_ShowTextNextLine (page, text);
     58     HPDF_Page_EndText (page);
     59 }
     60 
     61 
     62 int main (int argc, char **argv)
     63 {
     64     HPDF_Doc  pdf;
     65     HPDF_Font font;
     66     HPDF_Page page;
     67     char fname[256];
     68     HPDF_Destination dst;
     69 
     70     strcpy (fname, argv[1]);
     71     strcat (fname, ".pdf");
     72 
     73     pdf = HPDF_New (error_handler, NULL);
     74     if (!pdf) {
     75         printf ("error: cannot create PdfDoc object
    ");
     76         return 1;
     77     }
     78 
     79     /* error-handler */
     80     if (setjmp(env)) {
     81         HPDF_Free (pdf);
     82         return 1;
     83     }
     84 
     85     HPDF_SetCompressionMode (pdf, HPDF_COMP_ALL);
     86 
     87     /* create default-font */
     88     font = HPDF_GetFont (pdf, "Helvetica", NULL);
     89 
     90     /* add a new page object. */
     91     page = HPDF_AddPage (pdf);
     92 
     93     HPDF_Page_SetWidth (page, 550);
     94     HPDF_Page_SetHeight (page, 650);
     95 
     96     dst = HPDF_Page_CreateDestination (page);
     97     HPDF_Destination_SetXYZ (dst, 0, HPDF_Page_GetHeight (page), 1);
     98     HPDF_SetOpenAction(pdf, dst);
     99 
    100     HPDF_Page_BeginText (page);
    101     HPDF_Page_SetFontAndSize (page, font, 20);
    102     HPDF_Page_MoveTextPos (page, 220, HPDF_Page_GetHeight (page) - 70);
    103     HPDF_Page_ShowText (page, "PngDemo");
    104     HPDF_Page_EndText (page);
    105 
    106     HPDF_Page_SetFontAndSize (page, font, 12);
    107 
    108     draw_image (pdf, "hand.png", 50, 50/*HPDF_Page_GetHeight (page)*/,
    109                 "1bit grayscale.");
    110  
    111 
    112     /* save the document to a file */
    113     HPDF_SaveToFile (pdf, fname);
    114 
    115     /* clean up */
    116     HPDF_Free (pdf);
    117 
    118     return 0;
    119 }
    120 
    121 #else /* HPDF_NOPNGLIB */
    122 
    123 int main()
    124 {
    125     printf("WARNING: if you want to run this demo, 
    "
    126            "make libhpdf with HPDF_USE_PNGLIB option.
    ");
    127     return 0;
    128 }
    129 
    130 #endif /* HPDF_NOPNGLIB */

    工程头文件目录

    D:UsersPDFlibharuinclude;

    D:UsersPDFlpnginclude;

    D:UsersPDFzlibinclude;

    D:UsersPDFlibharuwin32include

    工程库文件目录

    D:UsersPDFlibharu;

    D:UsersPDFlpnglib

    工程使用库

    libhpdf.lib libpng.lib zlib.lib

  • 相关阅读:
    Idea中将项目支持groovy语法
    Python驱动SAP GUI完成自动化(四)
    山东一男孩疑被假警察掳走
    关系型数据库,查看表列表,及字段列表
    my.cnf配置
    MySQL 密码策略
    Docker UnicodeEncodeError: 'ascii' codec can't encode characters in position
    三星S20开启120Hz高刷新率
    三星S20关闭5G消息状态图标
    Centos 7挂载本地ISO光盘
  • 原文地址:https://www.cnblogs.com/nightnine/p/8947379.html
Copyright © 2011-2022 走看看