Chinaunix首页 | 论坛 | 博客
  • 博客访问: 530506
  • 博文数量: 576
  • 博客积分: 40000
  • 博客等级: 大将
  • 技术积分: 5020
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-13 14:47
文章分类

全部博文(576)

文章存档

2011年(1)

2008年(575)

我的朋友

分类:

2008-10-14 15:11:08

浅谈PDFlib中文输出(五)
-- 人工生成粗体及斜体字形

作者:Michelle Yi

一般来说, 每种基本字体, 都会有在其基础上变化字形的附加字体。比如,字体Arial, 就有其附加字体Arial Bold (粗体), Arial Italic(斜体), 及Arial Bold Italic(粗斜体)。一般你都可以找到或购买到相应的附加字体。
但有时为了应急,或对字体字形没有非常严格的要求。在这样的情况下,我们可以采用人工字形生成(Artificial font styles)。Artificial font styles是Acrobat的一个功能,它根据基本字形而模拟生成粗体,斜体及粗斜体。PDFlib支持这一功能,并遵守Acrobat对此功能的限制。目前此功能之局限于:
1. Acrobat标准字体, 就简体中文来说也就是PDFlib自带的STSong-Light,AdobeSongStd-Light-Acro,及STSongStd-Light-Acro三种简体中文字体。
2. PDFlib可以访问的.otf OpenType字体,并使用表1.1的编码(见), 且“embedding”参数设为假。

下面是一个相关的例子--C 源程序(附上生成的pdf文件 –PDFlib_cs5.pdf)。

/*******************************************************************/
/* This example demostrates the usage of Artificial font styles 
/* under Chinese Simplifed Windows.
/*******************************************************************/
#include 
#include 
#include 
#include "pdflib.h"

int main(void)
{
    PDF             	*p = NULL;
    int                	Font_H = 0, Font_CS = 0, Left = 50, y = 700;
    const int       	INCRY = 25;
    const char     TextUnicode[] = "\x80\x7B\x53\x4F\x2D\x4E\x87\x65";
    const int        TEXTLEN = 8;

    /* create a new PDFlib object */
    if ((p = PDF_new()) == (PDF *) 0)
    {
        printf("Couldn''t create PDFlib object (out of memory)!\n");
        return(2);
    }

    PDF_TRY(p) {
	if (PDF_begin_document(p, "pdflib_cs5.pdf", 0, "") == -1) 
            {
	    printf("Error: %s\n", PDF_get_errmsg(p));
	    return(2);
  	}

       PDF_set_info(p, "Creator", "pdflib_cs5.c");
       PDF_set_info(p, "Author", "myi@pdflib.com");
       PDF_set_info(p, "Title", "Usage of Artificial font styles");

        /* Start a new page. */
        PDF_begin_page_ext(p, a4_width, a4_height, "");
        Font_H = PDF_load_font(p, "Helvetica-Bold", 0, "winansi", "");
        PDF_setfont(p, Font_H, 24);
        PDF_show_xy(p, "Artificial Font Styles", Left + 100,  y);

        /* Normal */
        y -= 2 * INCRY;
        PDF_setfont(p, Font_H, 14);
        PDF_show_xy(p, "Normal", Left,  y);
        y -= INCRY;
        Font_CS = PDF_load_font(p, "STSong-Light", 0, "UniGB-UCS2-H", "");
        PDF_setfont(p, Font_CS, 14);
        PDF_show_xy2(p, TextUnicode, TEXTLEN, Left,  y);

        /* Italic */
        y -= 2 * INCRY;
        PDF_setfont(p, Font_H, 14);
        PDF_show_xy(p, "Italic", Left,  y);
        y -= INCRY;
        Font_CS = PDF_load_font(p, "STSong-Light", 0, "UniGB-UCS2-H", "fontstyle italic");
        PDF_setfont(p, Font_CS, 14);
        PDF_show_xy2(p, TextUnicode, TEXTLEN, Left,  y);

        /* Bold */
        y -= 2 * INCRY;
        PDF_setfont(p, Font_H, 14);
        PDF_show_xy(p, "Bold", Left,  y);
        y -= INCRY;
        Font_CS = PDF_load_font(p, "STSong-Light", 0, "UniGB-UCS2-H", "fontstyle bold");
        PDF_setfont(p, Font_CS, 14);
        PDF_show_xy2(p, TextUnicode, TEXTLEN, Left,  y);

        /* Bold-italic */
        y -= 2 * INCRY;
        PDF_setfont(p, Font_H, 14);
        PDF_show_xy(p, "Bold-italic", Left,  y);
        y -= INCRY;
        Font_CS = PDF_load_font(p, "STSong-Light", 0, "UniGB-UCS2-H", 
		"fontstyle bolditalic");
        PDF_setfont(p, Font_CS, 14);
        PDF_show_xy2(p, TextUnicode, TEXTLEN, Left,  y);

        /* End of page. */
	PDF_end_page_ext(p, "");
        PDF_end_document(p, "");
    }

    PDF_CATCH(p) {
        printf("PDFlib exception occurred in pdflib_cs5 sample:\n");
        	        printf("[%d] %s: %s\n",  PDF_get_errnum(p),  PDF_get_apiname(p),  
		PDF_get_errmsg(p));
        PDF_delete(p);
        return(2);
    }

    PDF_delete(p);
    return 0;
}

相关链接:


PDFLIB官方网站:
PDFLIB官方下载专页:
VC知识库PDFLIB下载:

(全文完)
--------------------next---------------------

阅读(539) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~