我必须集中注意力,不要去想在这个问题上浪费了多少时间,否则我的大脑会融化。
无论如何,如果有人看到这篇文章,我将分享我必须弄清楚的内容,直到它起作用:
- 要从 pango 获取正确的错误消息,请注册一个 glib 日志处理程序,请参见下文。
- Pango 假定相对于 pango dll 的特定文件夹结构来查找某些文件。如果 pango dll 位于 /foo/bin 或 /foo 中,它将尝试在 /foo/etc/pango 下找到“pango.modules”。该文件包含有关在哪里可以找到 pango 模块 dll 的信息。我发现最简单的方法是将pango模块dll放在/foo/lib/pango/1.8.0/modules下,然后执行“pango-querymodules.exe > pango.modules”生成模块文件的内容,然后手动删除路径,实际的 dll 文件名除外。我的机器上的内容见下文。
- 我花了几天时间才发现的实际问题是:我使用了从 Adobe Illustrator 导出的 SVG,这些 SVG 包含这样的文本元素
<text style="font-family:'Arial'; font-size:20;">Foo Bar</text>
,对我来说看起来不错,但似乎包含了字体系列周围的单引号并导致Pango 无法找到“Arial”字体,因为字体名称当然实际上是 Arial 而不是“Arial”,如果你知道我的意思的话。
Pango 消息处理程序
void PangoMessageHandler(const gchar *log_domain, GLogLevelFlags log_level, const gchar *message, gpointer user_data)
{
//TODO: handle log message
}
g_log_set_handler("Pango", G_LOG_LEVEL_WARNING | G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION, PangoMessageHandler, NULL);
pango.modules
"pango-arabic-lang.dll" ArabicScriptEngineLang PangoEngineLang PangoRenderNone arabic:*
"pango-basic-win32.dll" BasicScriptEngineWin32 PangoEngineShape PangoRenderWin32 common:
"pango-indic-lang.dll" devaIndicScriptEngineLang PangoEngineLang PangoRenderNone devanagari:*
"pango-indic-lang.dll" bengIndicScriptEngineLang PangoEngineLang PangoRenderNone bengali:*
"pango-indic-lang.dll" guruIndicScriptEngineLang PangoEngineLang PangoRenderNone gurmukhi:*
"pango-indic-lang.dll" gujrIndicScriptEngineLang PangoEngineLang PangoRenderNone gujarati:*
"pango-indic-lang.dll" oryaIndicScriptEngineLang PangoEngineLang PangoRenderNone oriya:*
"pango-indic-lang.dll" tamlIndicScriptEngineLang PangoEngineLang PangoRenderNone tamil:*
"pango-indic-lang.dll" teluIndicScriptEngineLang PangoEngineLang PangoRenderNone telugu:*
"pango-indic-lang.dll" kndaIndicScriptEngineLang PangoEngineLang PangoRenderNone kannada:*
"pango-indic-lang.dll" mlymIndicScriptEngineLang PangoEngineLang PangoRenderNone malayalam:*
"pango-indic-lang.dll" sinhIndicScriptEngineLang PangoEngineLang PangoRenderNone sinhala:*