使用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。
各编码定义如下:
| Encoding Character | set and text format |
| UniGB-UCS2-H UniGB-UCS2-V | Unicode (UCS-2) encoding for the Adobe-GB1 character collection |
| UniGB-UTF16-H UniGB-UTF16-V | Unicode (UTF-16BE) encoding for the Adobe-GB1 character collection. Contains mappings for all characters in the GB18030-2000 character set. |
| GB-EUC-H GB-EUC-V | Microsoft Code Page 936 (charset 134), GB 2312-80 character set, EUC-CN encoding |
| GBpc-EUC-H GBpc-EUC-V | Macintosh, GB 2312-80 character set, EUC-CN encoding, Script Manager code 2 |
| GBK-EUC-H GBK-EUC-V | Microsoft Code Page 936 (charset 134), GBK character set, GBK encoding |
| GBKp-EUC-H GBKp-EUC-V | Same as GBK-EUC-H, but replaces half-width Latin characters with proportional forms and maps code 0x24 to dollar ($) instead of yuan (¥). |
| GBK2K-H GBK2K-V | GB 18030-2000 character set, mixed 1-, 2-, and 4-byte encoding |
编码以-H结尾的,表示字体将会横向输出;以 –V结尾的,表示字体将会纵向输出。以Uni开头的是Unicode类编码,如果你的输入字符串是Unicode,则应选择此类编码。以GB开头的是CP936类编码,如果你的输入字符串是Code Page 936,则应选择此类编码。
GB-EUC-H对应GB2312是1980 年,中国发布了第一个汉字编码标准,全称 《信息交换用汉字编码字符集·基本集》,通常简称 GB (“国标”汉语拼音首字母), 共收录了 6763 个常用的汉字和字符,但是不包含繁体字和一些生僻字。
所以使用此字符集会出现繁体字和生僻字乱码的情况。
这里简单介绍一下常用的几种中文字符集的关系:
| GB2312 | 1980 年,中国发布了第一个汉字编码标准,也即 GB2312 ,全称 《信息交换用汉字编码字符集·基本集》,通常简称 GB (“国标”汉语拼音首字母), 共收录了 6763 个常用的汉字和字符,此标准于次年5月实施,它满足了日常 99% 汉字的使用需求 |
| GBK |
由于有些汉字是在 GB2312 标准发布之后才简化的,还有一些人名、繁体字、日语和朝鲜语中的汉字也没有包括在内,所以,在 GB2312 的基础上添加了这部分字符,就形成了 GBK ,全称 《汉字内码扩展规范》,共收录了两万多个汉字和字符,它完全兼容 GB2312 GBK 于 1995 年发布,不过它只是 "技术规范指导性文件",并不属于国家标准 |
| GB18030 |
GB18030 全称《信息技术 中文编码字符集》 ,共收录七万多个汉字和字符, 它在 GBK 的基础上增加了中日韩语中的汉字 和 少数名族的文字及字符,完全兼容 GB2312,基本兼容 GBK GB18030 发布过两个版本,第一版于 2000 年发布,称为 GB18030-2000,第二版于 2005 年发布,称为 GB18030-2005 |
看到这里,大概就知道应该怎么做了。就是把GB-EUC-H改成更全面的GBK-EUC-H或者GBK2K-H就可以了。
文章讲述了在使用PDFlib库生成PDF时遇到的中文生僻字和繁体字乱码问题,原因是字体编码设置不当。解决方案是将编码从GB-EUC-H更改为GBK-EUC-H或GBK2K-H,以支持更多汉字和字符。GB-EUC-H仅支持GB2312字符集,不包含繁体字和部分生僻字,而GBK和GB18030则提供了更广泛的汉字覆盖。

1357

被折叠的 条评论
为什么被折叠?



