`
kingsz1
  • 浏览: 155170 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

在 mingw 下编译 libHaru

阅读更多
以前我曾在 Dev-C++ 下编译过 libHaru 的 Demo,Dev-C++ 当然是很好的 C/C++ IDE,只是其携带的 mingw gcc g++ 没有更新过。最新的 mingw gcc g++ 稳定版最好的当然就直接从官方网站 http://www.mingw.org/ 下载和安装。

1. 下载安装 mingw (http://www.mingw.org/)
下载地址:http://sourceforge.net/projects/mingw/files/
下载得到一个文件 MinGW-5.1.6.exe, 把这个文件放到某个目录 (例如 e:\mingw_download), 双击 MinGW-5.1.6.exe, 选 核心文件 和 gcc/g++ , 下载并安装。
下载时间不长,大概15分钟。安装缺省是在 C:\mingw

2. 设置 C:\mingw\bin 路径
把 C:\mingw\bin 加入到 环境变量 的 系统变量 的 Path



完成后,打开一个命令行窗口, 输入: gcc --version 和 g++ --version
如果有版本信息显示,就说明安装和配置均完成。

3.下载 zlib 和 libpng 源文件

zlib 下载地址: http://www.zlib.net/zlib-1.2.3.tar.gz
下载后,解压到 e:\zlib

libpng 下载地址:http://sourceforge.net/projects/libpng/files/00-libpng-stable/1.2.41/libpng-1.2.41.tar.gz/download
下载后解压,把里面的目录 libpng-1.2.37-src (藏的很深啊:解压目录\src\libpng\1.2.37) 挖出来,放到 e:\ 并改目录名为 libpng (就是源文件放于 e:\libpng)

4. 编译 zlib 和 libpng

(4.1) 编译 zlib
打开命令行窗口,到 e:\zlib 目录下,输入以下命令:

   copy win32\makefile.gcc makefile.gcc
   mingw32-make -f makefile.gcc

完成后在该目录就新生成一个 libz.a 文件。

把 libz.a 文件复制到 C:\mingw\lib
把 zlib.h 和 zconf.h 两文件复制到 C:\mingw\include

(4.2) 编译 libpng
打开命令行窗口,到 e:\libpng 目录下,输入以下命令:

   copy scripts\makefile.gcc 
   mingw32-make -f makefile.gcc

完成后在该目录新生成一个 libpng.a 文件。

把 libpng.a 文件复制到 C:\mingw\lib
把 png.h 和 pngconf.h 两文件复制到 C:\mingw\include

5. 下载 libHaru 源文件和编译

(5.1) 下载 libHaru 源文件
下载地址: http://libharu.org/wiki/Downloads
最新源文件:http://libharu.org/files/libharu-2.1.0.tar.gz

下载后把得到的 libharu-2.1.0.tar.gz 文件解压,把里面的 libharu-2.1.0 目录复制到 e:\ 并改目录名为 libharu (就是把 libharu 的源文件放于 e:\libharu)

(5.2) 编译 libHaru
打开一个命令行,到 e:\libharu 目录下,输入以下命令:

   copy script\makefile.mingw
   mingw32-make -f makefile.mingw


完成后在该目录新生成一个 libhpdf.a 文件。

把 libhpdf.a 文件复制到 C:\mingw\lib
把 include\hpdf.h 和 include\hpdf_conf.h 两文件复制到 C:\mingw\include
把 win32\include\hpdf_config.h 文件复制到 C:\mingw\include

注意了:必须要复制这个 hpdf_config.h 文件,否知会出错,如下:



(5.3) 编译 Demo
在源文件有一个目录 demo 包含多个实例 c 文件,现在就可以编译这些样板了。
本来 makefile.mingw 已经包含了编译 demo 的选项,用以下命令来编译:

mingw32-make demo -f makefile.mingw


却出错,只编译了一个c文件就停止了,原因是其路径的设定不对。我没有修改这个 makefile.mingw 文件,而是把其中编译demo的配置,放到一个 批处理(.bat)文件,如下:

gcc -o demo/encoding_list.exe -Iinclude -O2 -Wall -mno-cygwin  demo/encoding_list.c -Lwin32/mingw -L. -lhpdf -lpng -lz

gcc -o demo/font_demo.exe -Iinclude -O2 -Wall -mno-cygwin  demo/font_demo.c -Lwin32/mingw -L. -lhpdf -lpng -lz

gcc -o demo/text_demo.exe -Iinclude -O2 -Wall -mno-cygwin  demo/text_demo.c demo/grid_sheet.c -Lwin32/mingw -L. -lhpdf -lpng -lz


运行这个批处理就可以完成编译,生成 exe 文件。运行这些 exe 就可以产生 PDF 文件。

注意了,以上的 encoding_list.exe 必须要在 demo 目录下运行,因为这个目录下的 \type1 子目录存放了所用到的字库(font),见源文件:



如果找不到字库,就出错(ERROR: error_no=1017, detail_no=2),如下:



我可是花了2天时间才知道问题所在,呵呵,惭愧。还是需要好好读书,学看源代码啊。


6. CJK 问题
这次把 libHaru 编译就是为了学习了解生成包含中文的PDF的过程和配置,最终的目的是要把 libHaru 编译为 swc 放到 Flex /AIR 里动态生成含中文的 PDF。

(6.1) demo 的示例 ttfont_demo_jp.c
该例子是生成含日文字符的PDF, 结合 libHaru 文档:
http://libharu.org/wiki/Documentation/API/Font
http://libharu.org/wiki/Documentation/Fonts
http://libharu.org/wiki/Documentation/Encodings

可以知道,其源文件中:
    /* declaration for using Japanese encoding. */
    HPDF_UseJPEncodings (pdf);

启用日文编码。而这一行读取字库:

    detail_font = HPDF_GetFont (pdf, detail_font_name, "90msp-RKSJ-H");


而这里,就设定字符大小,和输出到 PDF:

    HPDF_Page_SetFontAndSize (page, detail_font, 10);
    HPDF_Page_ShowText (page, SAMP_TXT);

输出内容来自变量 SAMP_TXT.

从网上搜索到极少的使用中文字库的例子片段,其中一个例子使用繁体中文的如下:

HPDF_Font fcp950;
.......
HPDF_UseCNTEncodings(pdf);
HPDF_UseCNTFonts(pdf);
//--- Use Built-in Chinese font ---
fcp950=HPDF_GetFont (pdf, "MingLiU","ETen-B5-H");
//--- now you can export chinese text ---


而使用ttf字库的例子,如下:

  font_name = malloc(10 * sizeof(font_name));
  font_name = HPDF_LoadTTFontFromFile(pdf, "timeSS.ttf", HPDF_TRUE);
  font = HPDF_GetFont (pdf, font_name, NULL);

  HPDF_Page_BeginText (page);

  /*  font = HPDF_GetFont (pdf, "Times-Roman", NULL); */
  HPDF_Page_SetFontAndSize (page, font, 12);







  • 大小: 33.5 KB
  • 大小: 19.3 KB
  • 大小: 34.8 KB
  • 大小: 4.8 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics