0

我正在使用 iTextSharp 5.4.4,并且我正在尝试构建一个有序的锚点列表。我面临两个问题:

  1. 如果我将锚点直接传递给 ListItem 的构造函数,它会在渲染输出中被视为块并失去其锚点特征。解决方法:我使用空构造函数初始化 ListItem,然后使用 ListItem.Add 添加锚点。

2.使用上面的解决方法,我尝试调整列表符号的字体以匹配使用的项目的字体

ListItem.AdjustListSymbolFont();

那行不通-我想这是因为对于itext,列表项中没有可以从中检索字体的块。所以我做的是以下

var listItem = new iTextSharp.text.ListItem(clickAnchor); // clickAnchor is treated as a Chunk
listItem.Add(clickAnchor); // i add the anchor again
listItem.AdjustListSymbolFont();
listItem.Remove(listItem.Chunks[0]); // after the font is adjusted, i remove the first Chunk

所以基本上我给它提供了一个我知道它会被视为块的元素,以便它有一个从中检索字体然后我将相同的元素添加到 ListeItem 并调整字体。然后,我从第一行代码的元素中删除第一个块,它处理并添加了它。这是一个非常丑陋的解决方法,但它是唯一有效的方法。

有没有更好的方法来完成上述工作?谢谢

4

1 回答 1

0

If I understand your question correctly, clickAnchor is an object of type Anchor. If you pass this to the ListItem as a parameter, it will be treated as a Phrase and all interactivity will be lost.

To avoid this, you shouldn't create an Anchor. Instead you should use a Chunk and make it interactive using the SetAnchor() method. This way, the anchor is preserved when you use it in a ListItem.

Update: Copy/past from the code snippet from kfc's comment:

var clickAnchor = new Chunk(pub.Title, anchorFont);
clickAnchor.SetLocalGoTo(i.ToString());
var listItem = new iTextSharp.text.ListItem(clickAnchor);
listItem.AdjustListSymbolFont();
于 2013-09-21T08:19:53.777 回答