首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pango无法用librsvg查找字体

Pango无法用librsvg查找字体
EN

Stack Overflow用户
提问于 2014-10-28 18:26:19
回答 1查看 2.1K关注 0票数 2

我使用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/

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-28 20:52:34

我必须集中精力,不要去想浪费在这个问题上的时间,否则我的大脑就会融化。

不管怎么说,万一有人看到这篇文章,我会告诉大家我要想出的办法,直到它成功为止:

  • 要从pango注册一个glib日志处理程序获得正确的错误消息,请参阅下面。
  • Pango假设相对于pango dll有一个特定的文件夹结构来查找某些文件。如果pango位于/foo/bin或/foo中,它将尝试在/foo/etc/pango下定位"pango.modules“。该文件包含有关在何处找到pango模块dll的信息。我发现的最简单的方法是将pango模块dlls放在/foo/lib/pango/1.8.0/模块下面,然后执行“pango-queryModes.exe> pango.modules”来生成模块文件的内容,然后手动删除路径,但实际的dll文件名除外。我的机器上的内容见下文。
  • 我花了几天时间才发现的实际问题是:我使用了从导出的SVG,这些SVG包含这样的文本元素 <text style="font-family:'Arial'; font-size:20;">Foo Bar</text> 这在我看来很好,但字型家族周围的单引号似乎包括在内,导致Pango无法找到字体“Arial”,因为字体名称实际上是Arial,而不是Arial,如果您知道我的意思的话。

Pango消息处理程序

代码语言:javascript
复制
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

代码语言:javascript
复制
"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:*
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26615767

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档