Шрифты не будут встраиваться с ABCpdf

Мы используем шрифты Proxima Nova (в частности, Proxima Nova Condensed Regular) в нашем проекте MVC .NET, но они не будут должным образом вставляться в вывод PDF. При просмотре свойств PDF я вижу "ProximaNovaCond-Regular (Embedded)" в списке, а значок рядом с ним выглядит как страница с серым "F" на нем. Я также вижу Arial Narrow и Arial Narrow, выделенные жирным шрифтом с пометкой "(встроенное подмножество)", и документ, по-видимому, не выполняет их.

Я не использую @ font-face в CSS, а скорее делаю это:

font-family: "Proxima Nova Cn Rg", "Proxima Nova Cond", "Proxima Nova Condensed";

В функции контроллера, которая генерирует страницы, есть этот код:

var targetDocument = CreateNewDoc(orientation, paperSize);
targetDocument.HtmlOptions.FontEmbed = true;
targetDocument.HtmlOptions.FontSubset = false;
targetDocument.HtmlOptions.FontSubstitute = false;
targetDocument.HtmlOptions.FontProtection = false;
targetDocument.Font = targetDocument.EmbedFont(Server.MapPath("\\Content\\fonts\\proxima-nova\\ProximaNova-Reg-webfont.ttf"));
targetDocument.Font = targetDocument.EmbedFont(Server.MapPath("\\Content\\fonts\\proxima-nova\\ProximaNova-Sbold-webfont.ttf"));

Если проект запускается локально, кажется, что шрифты работают, но не на сервере. Шрифты установлены на сервере. Есть ли что-то, что мы могли бы пропустить со шрифтами или как мы их встраивали? Здесь я рассмотрел несколько других вопросов, касающихся встраивания шрифтов, но ни один из них не предложил каких-либо решений для нашей ситуации. Я не уверен, какую другую информацию предоставить здесь, но дайте мне знать, что может понадобиться, чтобы ответить на мой вопрос, и я найду ее.

Изменить: я мог бы поклясться, я обновил это... Извинения перед респондентами. К сожалению, я не могу принять ни один из ответов как правильный, так как мы так и не смогли решить проблему.

2 ответа

Вы можете либо встроить шрифты, используя их имя, либо можете динамически загружать их из файла. Вы, кажется, пытаетесь сделать последнее, но это не работает. Что бы я сделал:

  • Проверьте путь после Server.MapPath() и убедитесь, что файл действительно существует, и у вас есть доступ к нему из вашего приложения.
  • Поскольку вы говорите, что на сервере установлены шрифты, вы можете просто попытаться использовать полное имя шрифта. Сначала убедитесь, что они действительно установлены правильно, и что вы используете правильное имя.

Для первого параметра targetDocument.EmbedFont необходимо указать гарнитуру шрифта, а не физический путь к шрифту.

например

targetDocument.EmbedFont("Arial Regular");

Чтобы получить правильное имя типа шрифта, перейдите в Панель управления \ Все элементы панели управления \ Шрифты в проводнике. Найди свой шрифт. Вам необходимо указать шрифт лица, а не семейство шрифтов. например, для Arial укажите "Arial Bold" или "Arial Regular".

Вы можете проверить, правильно ли возвращается ваш шрифт, проверив, что возвращаемое значение EmbedFont не равно нулю.

Другие вопросы по тегам