使用iTextSharp在系统中使用字体

我想用iTextSharp写一些文字。 我正在使用这种方法:

var font = BaseFont.CreateFont(BaseFont.TIMES_BOLD, BaseFont.WINANSI, BaseFont.EMBEDDED); 

我的问题是:iTextSharp支持系统字体目录中的所有字体吗?

假设我在字体选择器对话框中选择了一个名为“mycoolfont”的字体。 我可以创建一个类似这样的新iTextSharp字体吗?

 var font = BaseFont.CreateFont("mycoolfont", BaseFont.WINANSI, BaseFont.EMBEDDED); overContent.SetFontAndSize(font, fontSize); 

更新:

我试过var font = BaseFont.CreateFont("Verdana", BaseFont.WINANSI, BaseFont.EMBEDDED); 但得到错误“Verdana”不被itextsharp识别

首先,您需要注册字体,然后从FontFactory中检索它(并且不要每次都创建它):

 public static iTextSharp.text.Font GetTahoma() { var fontName = "Tahoma"; if (!FontFactory.IsRegistered(fontName)) { var fontPath = Environment.GetEnvironmentVariable("SystemRoot") + "\\fonts\\tahoma.ttf"; FontFactory.Register(fontPath); } return FontFactory.GetFont(fontName, BaseFont.IDENTITY_H, BaseFont.EMBEDDED); } 

我最后将这两个答案结合到这个方法中:

 public static Font GetFont(string fontName, string filename) { if (!FontFactory.IsRegistered(fontName)) { var fontPath = Environment.GetEnvironmentVariable("SystemRoot") + "\\fonts\\" + filename; FontFactory.Register(fontPath); } return FontFactory.GetFont(fontName, BaseFont.IDENTITY_H, BaseFont.EMBEDDED); } 

然后我在我的代码中使用它,如下所示:

 writer.DirectContent.SetFontAndSize(GetFont("Franklin Gothic Medium Cond", "FRAMDCN.TTF").BaseFont, 24f); 

在Windows上,您可以从字体的属性表中找到字体的文件名:

在此处输入图像描述

我还发现你必须在Details选项卡上使用字体的确切名称:

在此处输入图像描述

我发布这个,因为其他人可能会觉得这很有用。 当我在服务器上运行代码时,我遇到了类似的问题。 原因是itextsharp无法在OS中找到字体样式。 我的PDF在找不到字体时显示了一些随机的字体样式(dint throw error)。 我将所需的字体文件(.ttf)复制到我的项目bin文件夹并使用以下代码。

 public static BaseFont GetFont(string fontName) { return BaseFont.CreateFont(HttpContext.Current.Server.MapPath("~/Bin/" + fontName + ".ttf"), BaseFont.CP1252, BaseFont.EMBEDDED); } 

在这里,我得到了所需的字体

 `BaseFont sm = GetFont("comic"); //The fontName here should exactly match` the` file name in bin folder