Pdf 在简化阿拉伯语Windows Svr 2012或W10中找不到Uniscribe ScriptShape字符

Pdf 在简化阿拉伯语Windows Svr 2012或W10中找不到Uniscribe ScriptShape字符,pdf,fonts,arabic,uniscribe,Pdf,Fonts,Arabic,Uniscribe,我有一个应用程序,它必须将rtf文件中的字符串转换为pdf格式。 我有一个简化的阿拉伯语粗体的问题,它在Windows7中工作,但在Windows10或W.SRV2012中失败 一个非常简单的阿拉伯语单词: غ،دهو 我选择GDI+ToNative()方法返回的“简化阿拉伯语”字体。ScriptShape在Win7中返回正确的glyph ID,但在Win10中,返回的glyph ID不在CMAP表中。 例如,找不到GlyphId 678,因此我无法在PDF的呈现中添加字符 更详细的解释是: 以

我有一个应用程序,它必须将rtf文件中的字符串转换为pdf格式。 我有一个简化的阿拉伯语粗体的问题,它在Windows7中工作,但在Windows10或W.SRV2012中失败

一个非常简单的阿拉伯语单词: غ،دهو

我选择GDI+ToNative()方法返回的“简化阿拉伯语”字体。ScriptShape在Win7中返回正确的glyph ID,但在Win10中,返回的glyph ID不在CMAP表中。 例如,找不到GlyphId 678,因此我无法在PDF的呈现中添加字符

更详细的解释是:

以下是简化为最小表达式的RTF,以再现问题:

{\rtf1\fbidis\ansi\ansicpg1252\deff0\nouicompat\deflang1033
  {\fonttbl{\f0\froman\fprq2\fcharset178 Simplified Arabic;}{\f1\fnil Source Sans Pro;}} 
   \pard\ltrpar\cf1\b\f0\rtlch\fs32\lang1025\'db\'a1 \'cf\'e5\'e6 \cf0\b0\f1\ltrch\fs18\lang1033\par
}
为了生成PDF的原子,我首先得到System.Drawing.Font(“Simplified Arabic”,16,bold)

然后我调用
GetFontData(hDC,0,0,buffer,length)
并获取表TagGlyf data,从tableCMap.Win的glyphidaray[]构建一个
字典
(如果需要,我可以提供我的代码)

然后我打电话

Uniscribe.ScriptItemize(text, text.Length, items.Length, ref scriptControl, ref scriptState, items, ref itemsCount);
获取项目后,我调用
Uniscribe.ScriptLayout()
根据BiDi级别对运行进行排序

然后,我在当前hDc中选择字体,并为每个运行调用
ScriptShape()
,该调用返回运行的glyphid

使用Win7简化阿拉伯语(即使在Win10中),我得到以下标志符号: 字形

所有这些都与我可以发送到PDF的字符正确匹配。 然而,当我替换并使用W10或WinSvr 2012中的SimplifiedArabic粗体时,我得到

字形 {

您可以看到Win10字体中的字形[1]是678,但我在CMap表的字典中找不到该Id

如果我手动将glyphs[1]设置为194,它可以正常渲染正确的字符。所以我不知道为什么ScriptShape会对新字体使用哪个GlyphId感到困惑

(当然,如果我在Win10框中手动安装旧的Win7字体,它会工作得很好)

有什么建议吗

谢谢。
df

如果您是为win10开发的,请不要将GDI+与Uniscribe一起使用;这是旧的图形系统。尤其是在排版非常重要的情况下,请使用Direct2D,它使用DirectWrite(自Windows 7发布以来,一直是首选系统)如果您是为win10开发的,请不要将GDI+与Uniscribe一起使用;这是旧的图形系统。尤其是在排版很重要的情况下,请使用Direct2D,它使用DirectWrite(自从Windows 7发布以来,它一直是首选系统)
{ushort[9]}
    [0]: 3
    [1]: 194
    [2]: 395
    [3]: 174
    [4]: 3
    [5]: 157
    [6]: 185
ushort[9]}
    [0]: 3
    **[1]: 678**
    [2]: 395
    [3]: 174
    [4]: 3
    [5]: 157
    [6]: 185
    [7]: 0
    [8]: 0