Это для PdfSharp 1.5 beta3b. Вот полный и фиксированный пример, основанный на ссылках на другие ответы и на другие вопросы, но для Arial.
Добавьте шрифты, которые вы хотите к проекту - в моем примере ниже я положил Arial
в MyProject\fonts\arial\arial.ttf
и т. Д. Установите каждый файл шрифта в качестве встроенного ресурса (свойства -> действие сборки).
Нанести распознаватель шрифта с помощью статического вызова, как это:
MyFontResolver.Apply(); // Ensures it's only applied once
Вот класс распознаватель шрифта:
class MyFontResolver : IFontResolver
{
public FontResolverInfo ResolveTypeface(string familyName, bool isBold, bool isItalic)
{
// Ignore case of font names.
var name = familyName.ToLower().TrimEnd('#');
// Deal with the fonts we know.
switch (name)
{
case "arial":
if (isBold)
{
if (isItalic)
return new FontResolverInfo("Arial#bi");
return new FontResolverInfo("Arial#b");
}
if (isItalic)
return new FontResolverInfo("Arial#i");
return new FontResolverInfo("Arial#");
}
// We pass all other font requests to the default handler.
// When running on a web server without sufficient permission, you can return a default font at this stage.
return PlatformFontResolver.ResolveTypeface(familyName, isBold, isItalic);
}
public byte[] GetFont(string faceName)
{
switch (faceName)
{
case "Arial#":
return LoadFontData("MyProject.fonts.arial.arial.ttf");;
case "Arial#b":
return LoadFontData("MyProject.fonts.arial.arialbd.ttf");;
case "Arial#i":
return LoadFontData("MyProject.fonts.arial.ariali.ttf");
case "Arial#bi":
return LoadFontData("MyProject.fonts.arial.arialbi.ttf");
}
return null;
}
/// <summary>
/// Returns the specified font from an embedded resource.
/// </summary>
private byte[] LoadFontData(string name)
{
var assembly = Assembly.GetExecutingAssembly();
// Test code to find the names of embedded fonts - put a watch on "ourResources"
//var ourResources = assembly.GetManifestResourceNames();
using (Stream stream = assembly.GetManifestResourceStream(name))
{
if (stream == null)
throw new ArgumentException("No resource with name " + name);
int count = (int)stream.Length;
byte[] data = new byte[count];
stream.Read(data, 0, count);
return data;
}
}
internal static MyFontResolver OurGlobalFontResolver = null;
/// <summary>
/// Ensure the font resolver is only applied once (or an exception is thrown)
/// </summary>
internal static void Apply()
{
if (OurGlobalFontResolver == null || GlobalFontSettings.FontResolver == null)
{
if (OurGlobalFontResolver == null)
OurGlobalFontResolver = new MyFontResolver();
GlobalFontSettings.FontResolver = OurGlobalFontResolver;
}
}
}
обновленных образцов для версии 1.50 не были освобождены еще - они должны прийти в январь. Версия 1.50 находится в стадии бета-тестирования. Вы все равно можете получить PDFsharp версии 1.32 (исходные и NuGet-пакеты). –
Я скачал версию 1.32 и версию 1.3, и я все еще смущен. Моя путаница в том, что я вижу во всех примерах, что они используют xprivateFontCollection pfc = new xPrivateFontCollection(); pfc.Add (XXXXXX); и я получаю pfc.AddFont (XXX) Какую версию они используют, чтобы получить только pfc.Add, чтобы я мог использовать примеры? –
ОК понял, почему я не видел .Add, потому что я использовал GDI вместо WPF. Все еще не работает, но я немного приближаюсь. –