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选项卡上使用字体的确切名称:
小智 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)
| 归档时间: |
|
| 查看次数: |
37477 次 |
| 最近记录: |