使用PDFLib生成PDF文档(C语言版)--使用指导
1. 基本环境
① 打开、关闭、文档信息设定:
新建PDFLib对象,PDF_new()
设定错误处理的方式,PDF_set_parameter(p, \, \),return标示当发生错误时直接从Lib函数中返回。 设定文档信息,PDF_set_value()
新建一个PDF文件,PDF_begin_document() 新建一个页面,PDF_begin_page_ext() 关闭一个页面,PDF_end_page_ext() 关闭PDF文件,PDF_end_document() 释放PDFLib对象,PDF_delete() 例外处理,PDF_TRY()和PDF_CATCH()
② 示例代码:
#include
int main(int argc, char *argv[]) {
Example(); return 0;
}
int Example(void) {
PDF *p;
if ((p = PDF_new()) == (PDF *) 0){
printf(\ return(2); }
PDF_TRY(p) {
/* This means we must check return values of load_font() etc. */ PDF_set_parameter(p, \
if (PDF_begin_document(p, \ printf(\ return(2); }
/* This line is required to avoid problems on Japanese systems */
PDF_set_parameter(p, \ PDF_set_parameter(p, \
PDF_set_info(p, \ PDF_set_info(p, \ PDF_set_info(p, \
PDF_begin_page_ext(p, a4_width, a4_height, \
PDF_setcolor(p, \ PDF_rect(p, 250,250, 100, 50); PDF_fill(p);
PDF_end_page_ext(p, \ PDF_end_document(p, \ }
PDF_CATCH(p) {
printf(\ printf(\
PDF_get_errnum(p), PDF_get_apiname(p), PDF_get_errmsg(p));
PDF_delete(p); getchar(); return(2); }
PDF_delete(p); return 0; }
2. 文字输出
① 加载字体
使用PDF_load_font()函数。目前在Windows 平台下,似乎只能加载可以安
装到Windows系统中的字体。
如果加载已经安装到系统中的字体(在C:/windows/fonts文件夹下),可以直接通过字体的名字加载,如:
font = PDF_load_font(p, \ font = PDF_load_font(p, \, 0, \, \
也可以通过制定字体文件加载字体,如:
PDF_set_parameter(p, \\MKZ2=C://windows//fonts// MKZ2.ttf\
font= PDF_load_font(p, \
\和\是用于字体编码的方式,host日文系统下具体与代码页cp932等相关,中文系统下与cp936相关。Unicode与PDF所规定的CMAP文件相关,如:UniJIS-UCS2-H、EUC-H等的编码文件。因为字体已经安装
到了Windows系统中,具体的字体编码方式,操作系统能够自动处理,无需我们显式的指定。
加载字体是一件很耗费时间的工作,大概能占到整个处理的1/4左右。PDFLib已经作了些优化,当一个字体只要加载过一次,再次加载就会使用前面产生的字体句柄,不再重新生成。
PDFLIb加载字体时默认是嵌入的,这样会增大输出的PDF文件。好处是当文件被移动到其他系统上时,打开文件时不受字体的影响,否则,打开文件前需要先安装字体。我们这次的项目,生成的PDF文件需要用FTP转送到Solaris系统,并且要送入打印机,所以必须以嵌入方式加载的字体。
② 设置字体
使用PDF_setfont()函数,如:
PDF_setfont(p, font, 30);
30指的是字号,也就是字体的高度。但这个和系统的缩放比例相关。如果设字体前设定系统的缩放比例为2,实际输出的字体的高度为60个单位。PSEdit的字体的输出过程中,绝大部分采用的是变换系统坐标的方法来确定字体的大小,所以编程中使用了PDF_setfont(p, font, 1)的方式,即字体的大小为当前系统的缩放比例的值相同。
③ 文字输出
PDFLib的文字处理,较PostScript而言,加强了功能,增加了大量文字及段落等的处理。但本次PSEdit编程中,受于以前软件框架的限制,只使用了单字输出的功能PDF_info_textline(),尽管这个函数也能用于输出一个字符串。 PDF_info_textline函数有个选项列表,提供的功能相当丰富。基本上覆盖了对字体的所有的变化和变形。如:倾斜、旋转、缩放、着色、偏移以及指定字体等等。 ④ 文字阴影
采用在相互错开的位置上输出两次同样的字符,实现阴影。 ⑤ 空心字