从 Xamarin.Forms 使用 PdfSharp .Net Standard 预览加载字体失败:找不到合适的字体
Loading a Font with PdfSharp .Net Standard preview from Xamarin.Forms fails: No appropriate font found
我目前正在评估如何从 Xamarin.Forms 生成 PDF(目前 运行 仅 Android 上的应用程序)并检查 .NET Standard port of PdfSharp.
绘图到 PDF 并显示它有效,但我在向文档写入文本时遇到问题。当我尝试使用以下代码
加载 XFont
var font = new XFont("sans-serif", 20);
失败并出现异常
System.InvalidOperationException: No appropriate font found.
根据 these samples, it is supposed to work this way, but they are for PdfSharp.Xamarin and not the PdfSharp .NET Standard. According to this answer,"sans-serif"
字体系列应该是正确的,但我拼命尝试了其他选项,例如 "Roboto"
,但无济于事。
.NET Standard 的 PdfSharp 与 Xamarin 完全兼容吗? (它将 PdfSharp.Xamarin 列为创建它的来源,因此我假设它。)还有什么我错过的吗?
编辑
我尝试了 PdfSharp.Xamarin,它确实有效。显然这是 .NET Standard 端口的问题。
我有类似的问题,我通过编写自己的 IFontResolver
实现并将其分配给 GlobalFontSettings.FontResolver
来解决它。
public class FileFontResolver : IFontResolver // FontResolverBase
{
public string DefaultFontName => throw new NotImplementedException();
public byte[] GetFont(string faceName)
{
using (var ms = new MemoryStream())
{
using (var fs = File.Open(faceName, FileMode.Open))
{
fs.CopyTo(ms);
ms.Position = 0;
return ms.ToArray();
}
}
}
public FontResolverInfo ResolveTypeface(string familyName, bool isBold, bool isItalic)
{
if (familyName.Equals("Verdana", StringComparison.CurrentCultureIgnoreCase))
{
if (isBold && isItalic)
{
return new FontResolverInfo("Fonts/Verdana-BoldItalic.ttf");
}
else if (isBold)
{
return new FontResolverInfo("Fonts/Verdana-Bold.ttf");
}
else if (isItalic)
{
return new FontResolverInfo("Fonts/Verdana-Italic.ttf");
}
else
{
return new FontResolverInfo("Fonts/Verdana-Regular.ttf");
}
}
return null;
}
}
然后告诉 PDFSharp 使用它:
GlobalFontSettings.FontResolver = new FileFontResolver();
我目前正在评估如何从 Xamarin.Forms 生成 PDF(目前 运行 仅 Android 上的应用程序)并检查 .NET Standard port of PdfSharp.
绘图到 PDF 并显示它有效,但我在向文档写入文本时遇到问题。当我尝试使用以下代码
加载XFont
var font = new XFont("sans-serif", 20);
失败并出现异常
System.InvalidOperationException: No appropriate font found.
根据 these samples, it is supposed to work this way, but they are for PdfSharp.Xamarin and not the PdfSharp .NET Standard. According to this answer,"sans-serif"
字体系列应该是正确的,但我拼命尝试了其他选项,例如 "Roboto"
,但无济于事。
.NET Standard 的 PdfSharp 与 Xamarin 完全兼容吗? (它将 PdfSharp.Xamarin 列为创建它的来源,因此我假设它。)还有什么我错过的吗?
编辑
我尝试了 PdfSharp.Xamarin,它确实有效。显然这是 .NET Standard 端口的问题。
我有类似的问题,我通过编写自己的 IFontResolver
实现并将其分配给 GlobalFontSettings.FontResolver
来解决它。
public class FileFontResolver : IFontResolver // FontResolverBase
{
public string DefaultFontName => throw new NotImplementedException();
public byte[] GetFont(string faceName)
{
using (var ms = new MemoryStream())
{
using (var fs = File.Open(faceName, FileMode.Open))
{
fs.CopyTo(ms);
ms.Position = 0;
return ms.ToArray();
}
}
}
public FontResolverInfo ResolveTypeface(string familyName, bool isBold, bool isItalic)
{
if (familyName.Equals("Verdana", StringComparison.CurrentCultureIgnoreCase))
{
if (isBold && isItalic)
{
return new FontResolverInfo("Fonts/Verdana-BoldItalic.ttf");
}
else if (isBold)
{
return new FontResolverInfo("Fonts/Verdana-Bold.ttf");
}
else if (isItalic)
{
return new FontResolverInfo("Fonts/Verdana-Italic.ttf");
}
else
{
return new FontResolverInfo("Fonts/Verdana-Regular.ttf");
}
}
return null;
}
}
然后告诉 PDFSharp 使用它:
GlobalFontSettings.FontResolver = new FileFontResolver();