使用iTextSharp在系统中使用字体

tec*_*hno 12 c# pdf fonts itextsharp

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

var font = BaseFont.CreateFont(BaseFont.TIMES_BOLD, BaseFont.WINANSI, BaseFont.EMBEDDED);
Run Code Online (Sandbox Code Playgroud)

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

假设我在字体选择器对话框中选择了一个名为"mycoolfont"的字体.我可以创建一个新的iTextSharp字体吗?

var font = BaseFont.CreateFont("mycoolfont", BaseFont.WINANSI, BaseFont.EMBEDDED);
overContent.SetFontAndSize(font, fontSize);
Run Code Online (Sandbox Code Playgroud)

更新:

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

Vah*_*idN 19

首先,您需要注册字体,然后从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); 
}
Run Code Online (Sandbox Code Playgroud)


Mat*_*ock 10

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

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);
}
Run Code Online (Sandbox Code Playgroud)

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

writer.DirectContent.SetFontAndSize(GetFont("Franklin Gothic Medium Cond", "FRAMDCN.TTF").BaseFont, 24f);
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

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

在此输入图像描述

  • 谢谢你的回答......我现在放弃了这个项目.不记得是什么问题.你的回答会帮助别人:) (3认同)

小智 5

我发布这个,因为其他人可能会觉得这很有用.当我在服务器上运行代码时,我遇到了类似的问题.原因是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);
}
Run Code Online (Sandbox Code Playgroud)

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

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