使用pdflib输出中文生僻字和繁体字乱码问题。
添加中文字体语句,如下:
pdf->obj[2+i].offset = pdf->offset;length = LPDF_SPRINTF(pdf_buf,"%d 0 obj\n<<\n/Type /Font\n/Subtype /Type0\n""/BaseFont /SimSun\n/Encoding /GB-EUC-H\n/DescendantFonts [ %d 0 R ]\n"">>\nendobj\n\n",3+i,4+i);LPDF_FWRITE(&pdf->file,pdf_buf,length,&writeBytes);
参考pdf说明文档:
PDFlib自带STSong-Light,AdobeSongStd-Light-Acro,及STSongStd-Light-Acro三种简体中文字体。这三种字体同时也是Acrobat的简体中文标准字体。
以上三种字体均支持以下几种编码(Encoding):UniGB-UCS2-H,UniGB-UCS2-V,UniGB-UTF16-H,UniGB-UTF16-V,GB-EUC-H,GB-EUC-V,GBpc-EUC-H,GBpc-EUC-V,GBK-EUC-H,GBK-EUC-V,GBKp-EUC-H,GBKp-EUC-V,GBK2K-H,及GBK2K-V。
各编码定义如下:
编码以-H结尾的,表示字体将会横向输出;以 –V结尾的,表示字体将会纵向输出。以Uni开头的是Unicode类编码,如果你的输入字符串是Unicode,则应选择此类编码。以GB开头的是CP936类编码,如果你的输入字符串是Code Page 936,则应选择此类编码。
GB-EUC-H对应GB2312是1980 年,中国发布了第一个汉字编码标准,全称 《信息交换用汉字编码字符集·基本集》,通常简称 GB (“国标”汉语拼音首字母), 共收录了 6763 个常用的汉字和字符,但是不包含繁体字和一些生僻字。
所以使用此字符集会出现繁体字和生僻字乱码的情况。
这里简单介绍一下常用的几种中文字符集的关系:
看到这里,大概就知道应该怎么做了。就是把GB-EUC-H改成更全面的GBK-EUC-H或者GBK2K-H就可以了。