使用iTextSharp为段落添加超链接的问题及样式适配求助
解决iTextSharp中带样式链接文本的显示问题
我来帮你搞定这个iTextSharp的链接样式问题!咱们一步步拆解你的问题:
为什么第一个方法会显示额外文本?
你之前的代码里犯了一个小错误:同时把原Paragraph和包裹它的Anchor都添加到了文档里!
doc.Add(portfolioText); // 添加了普通段落 doc.Add(portAnch); // 又添加了带链接的锚点(包含同一个段落内容)
这就导致页面上显示了两次相同的文本,自然会出现额外内容。如果想用Anchor包裹Paragraph的方式,只需要添加portAnch这一个元素就好:
Paragraph portfolioText = new Paragraph("View our Portfolio", new Font(Font.FontFamily.HELVETICA, 15, Font.NORMAL, iTextSharp.text.BaseColor.WHITE)); portfolioText.Alignment = Element.ALIGN_CENTER; portfolioText.SetLeading(12.1f, 12.1f); portfolioText.IndentationLeft = 90; Anchor portAnch = new Anchor(portfolioText); portAnch.Reference = "http://portfolio.xxxxx.com/"; // 只添加锚点元素,不要重复添加原段落 doc.Add(portAnch);
为什么用Chunk加样式后不显示内容?
你用Chunk的思路是对的,但问题出在样式的继承/应用方式上。iTextSharp中Chunk的样式优先级高于Paragraph,如果只给Paragraph设置字体,Chunk可能不会继承(或者如果你的背景是白色,白色字体就会“消失”)。正确的做法是把字体样式直接应用到Chunk上,再搭配Paragraph的布局属性:
// 直接给Chunk指定字体样式,同时设置锚点 Chunk portText = new Chunk("View our Portfolio", new Font(Font.FontFamily.HELVETICA, 15, Font.NORMAL, iTextSharp.text.BaseColor.WHITE)); portText.SetAnchor(new Uri("http://portfolio.xxxxx.com/")); // 创建Paragraph并设置布局属性(对齐、行高、缩进) Paragraph p = new Paragraph(); p.Alignment = Element.ALIGN_CENTER; p.SetLeading(12.1f, 12.1f); p.IndentationLeft = 90; p.Add(portText); // 添加到文档 doc.Add(p);
这样既能保证链接正常生效,文本样式和布局也能完全符合你的需求。
内容的提问来源于stack exchange,提问作者user5407401
相关产品推荐
相关产品推荐

