Шрифты не будут встраиваться с 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 не равно нулю.