是否有可能从URI创建字体?像这样:
// c# code
string fontUri = "https://www.manyfonts.com/VAGRoundedStd-Thin.ttf";
BaseFont myfont = BaseFont.CreateFont(fontUri, BaseFont.CP1252, BaseFont.EMBEDDED);
// or
Font font = FontFactory.GetFont(fontUri, BaseFont.CP1252,false, 9);
我也尝试过用二进制
public static Font GetFont()
{
string fontUri = Config.FONT_URI;
Console.WriteLine(fontUri);
byte[] fontBinary = new WebClient().DownloadData(fontUri);
BaseFont bf = BaseFont.CreateFont(
"VAGRoundedStd-Thin.ttf",
BaseFont.WINANSI,
BaseFont.EMBEDDED,
false,
fontBinary,
null
);
return new Font(bf, 12, Font.NORMAL, Colors.PINK);
}
现在我得到了:
Unhandled Exception: System.NotSupportedException: No data is available for encoding 1252. For information on defining a custom encoding, see the documentation for the Encoding.RegisterProvider method.
at System.Text.Encoding.GetEncoding(Int32 codepage)
at iTextSharp.text.pdf.TrueTypeFont.ReadStandardString(Int32 length)
at iTextSharp.text.pdf.TrueTypeFont.Process(Byte[] ttfAfm, Boolean preload)
at iTextSharp.text.pdf.TrueTypeFont..ctor(String ttFile, String enc, Boolean emb, Byte[] ttfAfm, Boolean justNames, Boolean forceRead)
我的代码在lambda函数中,无法访问文件系统。也许将ttf加载到内存中,然后以某种方式在iTextSharp中加载?任何解决方法都欢迎。
答案 0 :(得分:0)
我要问自己。感谢@UweKeim @mkl @bruno的帮助。
如果您在not supported exception
上遇到问题(可能是因为您使用的是Mac或Linux),请将此引用添加到您的.csproj
。
<PackageReference Include="System.Text.Encoding.CodePages" />
这是一个通过添加到单元格文本的URL有效创建字体的代码段示例。
using System;
using System.Net;
using iTextSharp.text;
using iTextSharp.text.pdf;
namespace MyNameSpace
{
class Foo
{
public static PdfPCell CreateCellWithFontFromUrl()
{
// Necesary ONLY if you're getting the error `not supported encoding`
System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
string fontUri ="http://www.fonts.com/yourfontname.ttf";
byte[] fontBinary = new WebClient().DownloadData(fontUri);
BaseFont bf = BaseFont.CreateFont(
"VAGRoundedStd-Thin.ttf", // Is important you add ".ttf" at the end of the font name
BaseFont.WINANSI,
BaseFont.EMBEDDED,
false, // NO CACHE
fontBinary,
null
);
return bf;
};
Font MY_FONT = new Font(bf, 20, Font.BOLD, new Color(29, 29, 29));
PdfPCell cell = new PdfPCell(new Paragraph("text of the paragraph", MY_FONT));
return cell;
}
}