Teigha 在 Linux 下的编码设置
一、初始化多字节转码数据(adinit.dat)
adinit.dat 文件位于 Teigha 的 bin 目录下 ,初始化示例代码如下:
OdString iniFile = svcs.findFile(OD_T("adinit.dat")); if (!iniFile.isEmpty()) { OdCharMapper::initialize(iniFile); }
bigfont 字体是用文字的多字节编码进行索引的,如果没有进行上述初始化,就会导致转换出错误的多字节码,而导致最终显示错误的字形。
二、字体编码设置
bigfont 字体是用文字的多字节编码进行索引的,但文件里面并没有记录该字体对应的是哪个编码页(Code Page),当多语言字体混用的时候就会出问题,例如:中文和日文同时出现在图纸中时,系统并不清楚哪个字体是中文,哪个字体是日文。
需要提前配置好 bigfont.ini 文件,设置各字体对应的编码,再添加到系统中。示例代码如下:
OdRxSystemServices* pSs = odrxSystemServices(); if( pSs->accessFile(L"c:\\bigfont.ini", Oda::kFileRead)) { OdCharMapper::addBigFonts(pSs->createFile(L"c:\\bigfont.ini")); }
当然也可以通过以下接口单独设置字体对应的编码页:
OdCharMapper::addBigFontWithIndex OdCharMapper::addBigFontWithCodepage
三、设置系统编码页(Code Page)
示例代码如下:
svcs.setSystemCodePage(CP_ANSI_936);
默认是 CP_UNDEFINED,如果运行环境没有设置成中文环境,又未设置字体对应的编码页,就会导致乱码。
四、运行时依赖 TD_FtFontEngine.tx
在 Windows 下,并不需要 TD_FtFontEngine.tx。但在 Linux 下需要 TD_FtFontEngine.tx,不然 TrueType 字体就会显示成乱码。