Linux上的Mono 3.2.8中的PrivateFontCollection(Ubuntu 14.04.1)

时间:2015-09-04 21:30:59

标签: linux ubuntu fonts mono

我在4 - 5年前在互联网上看过一些帖子(一个来自StackOverflow,见here),但没有解决方案,Mono的GitHub回购的更改日志中没有任何内容,也没有其他提及这个的。我们的代码在.Net Framework下的Windows上运行正常,但在Mono 3.2.8下的Ubuntu 14.04.1上无法正常运行。

我编译了一个简单的控制台应用程序来说明问题。如果我们使用AddFontFile()或AddMemoryFont()将TTF数据加载到PrivateFontCollection中,我们可以整天实例化返回正确Name的Font对象,但是当尝试在Graphics.MeasureString()或Graphics.DrawString()或Graphics.MeasureCharacterRanges(),看起来Font已经回归到Ubuntu系统默认字体“DejaVu Sans”。

说明问题的代码在这里:

        Dim pfc As New System.Drawing.Text.PrivateFontCollection

    pfc.AddFontFile("Open Sans Condensed Bold.ttf")

    Using f As New System.Drawing.Font(pfc.Families(0), 16)

        Using img As New System.Drawing.Bitmap(100, 500)

            Using g As System.Drawing.Graphics = System.Drawing.Graphics.FromImage(img)

                g.Clear(Drawing.Color.White)

                g.DrawString(f.Name, f, Drawing.Brushes.Black, 0, 0)

            End Using

            img.Save("testfont.png", System.Drawing.Imaging.ImageFormat.Png)

        End Using
    End Using

除了在运行代码的系统上安装字体之外,是否有可用的解决方法(顺便说一句,即使执行上面的代码而不是按名称实例化Font,这也让我相信问题实际上可能在于libgdiplus,因为它使用了fontconfig)。

之前还有其他人遇到过这个吗?无论我尝试什么TrueType文件,如果没有在系统上安装字体,这将无法正常工作。

0 个答案:

没有答案