我怎样才能创建一个"链接外观"字体与iTextSharp?

时间:2015-04-13 21:18:17

标签: c# fonts pdf-generation itextsharp

我想使用此GetFont重载:

GetFont(string fontname, string encoding, float size, int style, BaseColor color)

...枚举here。但是,当我尝试时,它没有编译:

var linkFont = FontFactory.GetFont(FontFactory.HELVETICA, 9, Font.Underline, BaseColor.BLUE);

我得到了" 最好的重载方法匹配' iTextSharp.text.FontFactory.GetFont(string,float,int,iTextSharp.text.BaseColor)'有一些无效的论点"

但是哪一个,为什么?

我也明白," 论据3:无法转换为' bool'到' int' "

为什么它认为第三个arg(Font.Underline,一个" int")应该是一个bool?那是布尔;我的意思是,那不是(a)布尔。

注意:我得到同样的错误:

var linkFont = FontFactory.GetFont(FontFactory.HELVETICA, 9.0f, Font.Underline, BaseColor.BLUE);

我该怎么做才能创建一个看起来像链接的字体。我的工作正常,但是:

var linkFont = FontFactory.GetFont(FontFactory.HELVETICA, 9, BaseColor.BLUE);
Anchor anchor = new Anchor("Adobe Reader", linkFont);
anchor.Reference = "http://www.adobe.com";

PdfPTable tbl = new PdfPTable(1);
tbl.WidthPercentage = 50;
tbl.HorizontalAlignment = Element.ALIGN_LEFT;
var par = new Paragraph();
par.Add(boldpart);
par.Add(ini);
par.Add(anchor);

...但是"锚"只是蓝色文字,没有下划线,因此显然不是链接/可点击。

3 个答案:

答案 0 :(得分:2)

看起来很正确。但是,当我在我的机器上尝试它时,Font.Underline引发了一个错误。唯一可用的常量是 CAPS

中的字体。 UNDERLINE
var linkFont = FontFactory.GetFont(FontFactory.HELVETICA, 9.0f, Font.UNDERLINE, BaseColor.BLUE);

您可以检查Font类的命名空间。看起来这就是错误所在。它应该来自namespance iTextSharp.text.Font

您使用的是Control.Font.Underline,这是一个bool且不正确。如上所述,使用iTextSharp中的Font类。

答案 1 :(得分:2)

两个问题。

首先,您尝试使用5参数重载,但只传递4个参数。

其次,当您尝试使用Font.Underline时,您实际上使用的是System.Drawing.Font.Underline而不是iText。

除非您需要将编码开关指定为:

var linkFont = FontFactory.GetFont(FontFactory.HELVETICA, 9, iTextSharp.text.Font.UNDERLINE, BaseColor.BLUE);

答案 2 :(得分:1)

它认为第三个论点是布尔的原因是因为Font.Underline是一个布尔!您需要使用FontStyle.Underline

编辑:FontStyle.Underline是System.Drawing.Font.Underline,iTextSharp不使用它。它具有为字体样式定义的常量,应该使用它们:

  /// <summary> this is a possible style. </summary>
    public const int NORMAL        = 0;

    /// <summary> this is a possible style. </summary>
    public const int BOLD        = 1;

    /// <summary> this is a possible style. </summary>
    public const int ITALIC        = 2;

    /// <summary> this is a possible style. </summary>
    public const int UNDERLINE    = 4;

    /// <summary> this is a possible style. </summary>
    public const int STRIKETHRU    = 8;

    /// <summary> this is a possible style. </summary>
    public const int BOLDITALIC    = BOLD | ITALIC;