如何使用 iTextSharp 创建 "link-looking" 字体?

How can I create a "link-looking" font with iTextSharp?

我想使用这个 GetFont 重载:

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

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

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

我明白了,“'iTextSharp.text.FontFactory.GetFont(string, float, int, iTextSharp.text.BaseColor)' 的最佳重载方法匹配有一些无效参数

但是是哪一个,为什么?

我还得到,“参数 3:无法从 'bool' 转换为 'int'

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

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

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

我必须怎么做才能创建看起来像 link 的字体。我让它工作正常,使用:

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);

...但是 "anchor" 只是蓝色文本,没有下划线,因此显然不是 link/clickable.

它认为第三个参数是布尔值的原因是因为 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;

看起来是正确的。然而,当在我的机器上尝试时,Font.Underline 抛出了一个错误。唯一可用的常量是 Font.UNDERLINE in CAPS

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

你能检查字体的命名空间吗class。看起来这就是错误所在。它应该来自命名空间 iTextSharp.text.Font

您正在使用 Control.Font.Underline,它是一个布尔值并且不正确。如上所述,使用 iTextSharp 中的字体 class。

两个问题。

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

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

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

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