Pango无法使用librsvg查找字体

Gig*_*igo 1 pango cairo librsvg

我正在使用librsvg将SVG文件呈现给Cairo上下文.然后我使用Pango"手动"在顶部渲染一些文本.

渲染SVG时,我得到Pango警告它无法加载字体:
"couldn't load font "'Calibri' Not-Rotated 16", falling back to "Sans Not-Rotated 16", expect ugly output."

之后通过Pango手动文本渲染完美无缺.我尝试了多个不同的字体系列,它们都可以正常渲染,没有任何警告.

我甚至浏览了librsvg源代码,看看它是如何使用Pango但我看不出与我正在做什么有任何重大差异.

我不知道如何继续调试这个问题,任何有关Pango如何在Windows下定位字体以及可能影响其查找能力的建议都非常感谢.

如果重要:
我从这里下载了所有需要的二进制文件:http://sourceforge.net/projects/ezwinports/files/

Gig*_*igo 5

我必须集中注意力不要考虑在这个问题上浪费的时间或者我的大脑会融化.

无论如何,如果有人遇到这篇文章,我将分享我必须弄清楚的东西,直到它起作用:

  • 要从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,它们包含这样的文本元素
    <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);
Run Code Online (Sandbox Code Playgroud)

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:*
Run Code Online (Sandbox Code Playgroud)