C# 从iTextSharp中的嵌入式资源加载BaseFont

C# 从iTextSharp中的嵌入式资源加载BaseFont,c#,asp.net,itextsharp,C#,Asp.net,Itextsharp,我正在使用iTextSharp生成动态PDF文档。我需要使用一种非常特殊的字体,我已经获得了.ttf文件的许可 我可以使用下面的代码来加载和使用字体,但是我更喜欢将字体文件作为嵌入资源放置在我的类库中,而不是依赖于磁盘上的特定位置 string fontpath = Server.MapPath("."); BaseFont customfont = BaseFont.CreateFont(fontpath + "myspecial.ttf", BaseFont.CP1252, BaseF

我正在使用iTextSharp生成动态PDF文档。我需要使用一种非常特殊的字体,我已经获得了.ttf文件的许可

我可以使用下面的代码来加载和使用字体,但是我更喜欢将字体文件作为嵌入资源放置在我的类库中,而不是依赖于磁盘上的特定位置

string fontpath = Server.MapPath(".");
BaseFont customfont = BaseFont.CreateFont(fontpath + "myspecial.ttf", BaseFont.CP1252,    BaseFont.EMBEDDED);
Font font = new Font(customfont, 12);
string s = "My expensive custom font.";
doc.Add(new Paragraph(s, font));

有人能帮助我如何实现这一点吗?

查看ITextSharp源代码后,您似乎可以使用以下超负荷的
BaseFont.CreateFont
将嵌入的资源用作字体(中的第543行):


ttfAfm
应将TTF文件表示为
字节[]

这是有关如何执行此操作的示例代码:

Stream fontStream = Assembly.GetExecutingAssembly().GetManifestResourceStream("font.resource.path.fontfilename.ttf");
var fontBytes = ReadByteArray(fontStream);
var customFont = BaseFont.CreateFont("fontfilename.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED, BaseFont.CACHED, fontBytes, null);

我还发现,不设置字体名称(CreatFont()的第一个参数)会引发一个模糊的异常,但指定字体文件的确切名称效果很好。

您可以直接从参考资料中获取fontBytes。在下面的示例中,我有一个名为“FontFiles.resx”的资源文件


签出此链接到ITextSharp的站点@DJKRAZE-在您引用的站点中,它在哪里谈到从嵌入式资源加载字体?+1-如果您还不知道,以及。在Java中,但在.NET中可能是相同的,也可能是非常接近的。或者,如果您喜欢查看源代码,请忽略;)谢谢你的指导,我设法让代码工作,我已经张贴在下面。
Stream fontStream = Assembly.GetExecutingAssembly().GetManifestResourceStream("font.resource.path.fontfilename.ttf");
var fontBytes = ReadByteArray(fontStream);
var customFont = BaseFont.CreateFont("fontfilename.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED, BaseFont.CACHED, fontBytes, null);
var customFont = BaseFont.CreateFont("fontfilename.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED, BaseFont.CACHED, FontFiles.fontfilename, null);