【问题标题】:Pango unable to find fonts with librsvgPango 无法使用 librsvg 找到字体
【发布时间】:2014-10-28 18:26:19
【问题描述】:

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

【问题讨论】:

    标签: cairo pango librsvg


    【解决方案1】:

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

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

    • 要从 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 文件名。我的机器上的内容见下文。
    • 我花了几天时间才发现的实际问题是:我使用了从 Adob​​e 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);
    

    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:*
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多