首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

PDFlib 中文輸出(五):人工生成粗體與斜體字形

     編輯:關於VC++

背景

標準字體通常提供 Bold、Italic、BoldItalic 變體。但緊急情況下或對字形要求不嚴格時,可使用 Artificial Font Styles(人工字形生成):Acrobat 依基礎字形模擬粗體/斜體。PDFlib 支援此功能並遵守 Acrobat 限制。

適用範圍限制

  1. Acrobat 標準字體:簡體中文僅限 STSong-Light、AdobeSongStd-Light-Acro、STSongStd-Light-Acro
  2. PDFlib 可存取的 .otf OpenType 字體,使用表 1.1 編碼,且 embedding=false

C 範例程式碼

/*******************************************************************/
/* Artificial font styles demo under Chinese Simplified 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;

    if ((p = PDF_new()) == (PDF *)0) {
        printf("Couldn't create PDFlib object!\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");

        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);

        PDF_end_page_ext(p, "");
        PDF_end_document(p, "");
    }
    PDF_CATCH(p) {
        printf("PDFlib exception: [%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;
}

關鍵點解析

  • PDF_load_font 最後一參數傳入 "fontstyle italic"、"fontstyle bold"、"fontstyle bolditalic" 啟用人工字形
  • 同一基礎字體 STSong-Light 透過不同 fontstyle 選項產生四種變體
  • 輸出 PDF 可對比人工字形與真實字體差異
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved