Closed williammsouza closed 4 years ago
You must implement a font resolver. I embed some fonts like Liberation and Roboto into my assembly, so it is easier to distribute.
I use something like this:
public class MyFontResolver : IFontResolver
{
public byte[] GetFont(string faceName)
{
// TODO read bytes from ttf files, e.g. from embedded resources
return ...
}
public FontResolverInfo ResolveTypeface(string familyName, bool isBold, bool isItalic)
{
var name = familyName.ToLower().TrimEnd('#');
switch (name)
{
case "liberation mono":
{
if (isBold)
{
if (isItalic)
return new FontResolverInfo("Liberation_Mono.LiberationMono-BoldItalic", false, false);
return new FontResolverInfo("Liberation_Mono.LiberationMono-Bold", false, false);
}
if (isItalic)
return new FontResolverInfo("Liberation_Mono.LiberationMono-Italic", false, false);
return new FontResolverInfo("Liberation_Mono.LiberationMono-Regular", false, false);
}
default:
case "liberation sans":
{
if (isBold)
{
if (isItalic)
return new FontResolverInfo("Liberation_Sans.LiberationSans-BoldItalic", false, false);
return new FontResolverInfo("Liberation_Sans.LiberationSans-Bold", false, false);
}
if (isItalic)
return new FontResolverInfo("Liberation_Sans.LiberationSans-Italic", false, false);
return new FontResolverInfo("Liberation_Sans.LiberationSans-Regular", false, false);
}
case "liberation serif":
{
if (isBold)
{
if (isItalic)
return new FontResolverInfo("Liberation_Serif.LiberationSerif-BoldItalic", false, false);
return new FontResolverInfo("Liberation_Serif.LiberationSerif-Bold", false, false);
}
if (isItalic)
return new FontResolverInfo("Liberation_Serif.LiberationSerif-Italic", false, false);
return new FontResolverInfo("Liberation_Serif.LiberationSerif-Regular", false, false);
}
case "roboto slab":
{
if (isBold)
return new FontResolverInfo("Roboto_Slab.RobotoSlab-Bold", false, isItalic);
return new FontResolverInfo("Roboto_Slab.RobotoSlab-Regular", false, isItalic);
}
case "roboto":
{
if (isBold)
{
if (isItalic)
return new FontResolverInfo("Roboto.Roboto-BoldItalic", false, false);
return new FontResolverInfo("Roboto.Roboto-Bold", false, false);
}
if (isItalic)
return new FontResolverInfo("Roboto.Roboto-RegularItalic", false, false);
return new FontResolverInfo("Roboto.Roboto-Regular", false, false);
}
}
}
private static MyFontResolver _fontResolver = null;
internal static MyFontResolver Instance
{
get
{
if (_fontResolver == null)
_fontResolver = new MyFontResolver();
return _fontResolver;
}
}
and then do once on startup
if (PdfSharp.Fonts.GlobalFontSettings.FontResolver == null)
PdfSharp.Fonts.GlobalFontSettings.FontResolver = MyFontResolver.Instance;
PdfSharp is not really thread safe, I had to serialize the creation of documents. Be sure to test this.
I'm trying to run in azure function and I'm getting this error. Does anyone know why this is?