最近抽空学习了一下使用c语言来生成pdf文件的库-libHaru,利用该库你可以不必关心pdf内部复杂的结构来生成你所需要的pdf文档,跟着libHaru库中的示例敲了一遍代码,对libHaru库有了一些认知(当然目前还没有完全看完示例代码),在此做出一些笔记顺便记录一下遇到的一些API接口。
1. 首先是libHaru的坐标系统,跟我们平时所使用的坐标系统不同,平时使用c语言时默认的坐标原点都是在左上角,而在libHaru中坐标原点是在左下角,如下所示:
对于pdf文档中的任何一个目标其位置坐标都是指的是目标的左下角,例如我们要在(x,y)处显示字符'Ag',则效果是下面这样的
2. 图形模式,在libHaru中有三种图形模式:HPDF_GMODE_PAGE_DESCRIPTION、HPDF_GMODE_TEXT_OBJECT、HPDF_GMODE_PATH_OBJECT,三者的转换关系如下所示:
默认情况下page对象处于HPDF_GMODE_PAGE_DESCRIPTION模式,通过调用相应的API接口来切换到HPDF_GMODE_PATH_OBJECT或HPDF_GMODE_TEXT_OBJECT模式,HPDF_GMODE_PATH_OBJECT和HPDF_GMODE_TEXT_OBJECT之间是不能直接切换的,必须要通过HPDF_GMODE_PAGE_DESCRIPTION来切换,有点儿类似VIM的几种模式的切换。之所以要熟悉page对象的几种模式是因为libHaru中的一些API接口只能在所需的模式下调用,如果不在所需的模式下调用就会报错,举个例子,我们要设置字体类型以及字体大小是调用HPDF_PAGE_SetFontAndSize()接口,该接口的说明如下:
可知该接口需要在HPDF_GMODE_PAGE_DESCRIPTION或HPDF_GMODE_TEXT_OBJECT模式下调用,如果当前是在HPDF_GMODE_PATH_OBJECT模式下调用该接口就会报出0x1051错误--HPDF_PAGE_INVALID_GMODE。
3. 文本坐标,在绘制文本信息时libHaru内部会维持着一个文本坐标的信息,而每次调用HPDF_Page_BeginText()接口进入文本模式时该坐标信息就会清零,因此在示例中经常会遇到需要绘制不同的文本信息时就重新调用一次HPDF_Page_BeginText()接口,显示文本信息的API接口有如下几个:
前面三个接口都是在当前位置显示文本信息,后两个接口是在指定位置显示文本,有一点区别是前三者不会更新当前文本坐标信息,而后两者