MigraDoc私有字体错误-具有指定家族名称的条目已经存在

本文关键字:存在 家族 字体 错误 -具 MigraDoc | 更新日期: 2023-09-27 18:14:56

我正在使用MigraDoc dll (WPF构建)来生成pdf,并且我添加了下面给出的代码,用于添加新的私有字体:

                XPrivateFontCollection pfc = XPrivateFontCollection.Global;
                Uri myuri = new Uri(Server.MapPath("/Assets/Rupee_Foradian.ttf"));
                pfc.Add(myuri, "./#Rupee Foradian");

PDF成功生成,字体正确加载并按预期显示,但当我第二次尝试创建PDF时,我得到一个ArgumentException:具有指定姓氏的条目已经存在

有谁能帮我解决这个问题吗?

MigraDoc私有字体错误-具有指定家族名称的条目已经存在

正如名称XPrivateFontCollection.Global所暗示的那样,字体集合是全局的,并且只存在一次。

你的代码应该只添加一次字体(对于第一个文档),而不是每次创建一个文档。

编辑:要想只执行一次代码,你可以使用另一个全局变量(例如静态类成员):

static bool _privateFontsInstalled;
private static void LoadPrivateFonts()
{
    if (!_privateFontsInstalled)
    {
        try
        {
            Uri uri = new Uri("pack://application:,,,/");
            PdfSharp.Drawing.XPrivateFontCollection.Add(uri, "...");
            PdfSharp.Drawing.XPrivateFontCollection.Add(uri, "...");
            PdfSharp.Drawing.XPrivateFontCollection.Add(uri, "...");
            _privateFontsInstalled = true;
        }
        catch
        {
            Debug.Assert(false);
        }
    }
}