一、初始化多字节转码数据(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 字体就会显示成乱码。

发表回复

您的电子邮箱地址不会被公开。