我当前正在评估如何从xamarin.forms生成PDF(当前仅在Android上运行该应用程序(,并检查PDFSHARP的.NET标准端口。
。绘制到PDF并显示其有效,但是我遇到了编写文档的问题。当我尝试加载XFont
时,使用以下代码
var font = new XFont("sans-serif", 20);
它失败了,异常
system.invalidoperationException:找不到合适的字体。
根据这些样品,它应该以这种方式工作,但它们适用于pdfsharp.xamarin,而不是pdfsharp .NET标准。根据此答案,"sans-serif"
字体家族应该是正确的,但是我拼命尝试了其他选项,例如"Roboto"
,但无济于事。
PDFSHARP是否完全适用于.NET标准与Xamarin兼容?(它列出了pdfsharp.xamarin作为它创建的来源,因此我假设了。(我还有其他我错过的吗?
编辑
我尝试了pdfsharp.xamarin,它确实有效。显然,这是.NET标准端口的问题。
我也有类似的问题,我通过编写自己的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();
如果您拒绝上述代码的访问。请用
替换代码public byte[] GetFont(string faceName)
{
using (var ms = new MemoryStream())
{
using (var fs = File.OpenRead(faceName))
{
fs.CopyTo(ms);
ms.Position = 0;
return ms.ToArray();
}
}
}