2015-09-28 3 views
0

Я использую библиотеки MigraDoc DLL (сборка WPF) для создания pdf-файла, и я добавил приведенный ниже код, который выполняет работу по добавлению нового частного шрифта:MigraDoc Private Font Error - запись с указанным именем уже существует

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

формата PDF успешно создает с загрузкой шрифта правильно и отображения, как и ожидалось, но когда я пытаюсь во второй раз, чтобы создать PDF-файл я получаю ArgumentException: запись с указанным именем семьи уже существует

Может ли кто-нибудь помочь мне решить эту проблему?

ответ

1

Как следует из названия XPrivateFontCollection.Global, коллекция шрифтов global и существует только один раз.

Ваш код должен содержать шрифт только один раз (для первого документа) и не каждый раз, когда вы создаете документ.

Edit: Чтобы выполнить код только один раз, вы можете использовать другую глобальную переменную (например, статический член класса):

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); 
     } 
    } 
} 
+0

так как я идти о добавлении его только один раз в коде ..? – Neville

+0

@Neville Обновлено мое сообщение. –

+0

Большое вам спасибо! ценить это ! – Neville