Использование частных TTF-шрифтов в PDFsharp
Я работаю над настольным приложением C# .NET WPF, которое будет генерировать PDF-файл, для которого требуется очень специфический шрифт, который не будет установлен в системе. Я использую PdfSharp-WPF v1.32. Файл importantSc.ttf
находится в папке ресурсов проекта.
Лучше всего, если мой путь URI неправильный, но я думаю, что он правильный. У меня правильное имя семейства шрифтов, так как оно работало, когда шрифт был установлен на моем компьютере разработчика.
using System;
using PdfSharp.Drawing;
using PdfSharp.Pdf;
using PdfSharp.Pdf.IO;
using Microsoft.Win32;
using PdfSharp.Drawing.Layout;
using System.Collections.Generic;
using System.Windows.Input;
using System.Windows;
namespace MyProject
{
public class MyPdfFile
{
private PdfDocument doc;
public void MakePdf()
{
Double x1, y1;
XBrush brush = XBrushes.Black;
XGraphics xgf = XGraphics.FromPdfPage(page);
doc = new PdfDocument();
PdfPage page = doc.AddPage();
// Load in a private font to use.
XPrivateFontCollection privateFontCollection = new XPrivateFontCollection();
String fontFamilyName = "Important Script AM";
String fontUriPath = @"pack://application:,,,/importantSc.ttf";
Uri fontUri = new Uri( fontUriPath );
privateFontCollection.Add(fontUri, "./#" + fontFamilyName);
XFont font = new XFont(fontFamilyName, 9, XFontStyle.Regular); // <-- the error happens here
//Add text to page
x1 = 1.96 * 72;
y1 = 3.25 * 72;
String printString = "I wish this would work!";
xgf.DrawString(printString, font, brush, x1, y1);
xgf.Dispose();
}
}
}
Я получаю следующую ошибку:
Необработанное исключение типа "System.InvalidOperationException" возникло в PdfSharp-WPF.dll
Дополнительная информация: Не удается получить соответствующий шрифт глифа для шрифта "Важный сценарий AM".
1 ответ
Вы не задаете вопросов.
Вот несколько заметок.
Обработка шрифтов стала намного лучше с PDFsharp 1.50 (в настоящее время бета-версия 3b). Я бы использовал 1,50, потому что я думаю, что новая бета-версия лучше, чем старая "стабильная" версия.
С IFontResolver
Вы можете избежать использования синтаксиса ресурса "pack:".
Вы можете использовать такие инструменты, как DotNetPeek от JetBrains, чтобы проверить, действительно ли TTF встроен в сборку и под каким именем.
Вы можете использовать пакет исходного кода PDFsharp и отлаживать через privateFontCollection.Add
чтобы увидеть, если он находит шрифты и, если да, какие шрифты.
С MCVE я мог бы помочь вам отладки.
https://stackru.com/help/mcve