我正在使用iTextSharp从数据库中包含的数据生成PDF。有一个文本字段使用HTML格式。我找到了以下代码来获取HTML块并将它们插入段落中。
Dim p As New Paragraph()
Dim htmlarraylist As List(Of IElement) = HTMLWorker.ParseToList(New StringReader(HtmlString), Nothing)
For k As Int32 = 0 To htmlarraylist(0).Chunks().Count() - 1
Dim c As Chunk = htmlarraylist(0).Chunks(k)
p.Add(c)
Next
问题是当链接通过此代码传递时,它的格式不像链接。我可以点击它,但它与文本的其余部分颜色相同,并且没有加下划线。
有没有办法在iTextSharp中全局格式化html链接?
或者,是否有任何方法可以识别通过上述For语句传递的块实际上是链接,因此我可以在循环内单独格式化它们?我已经逐步完成循环并查看了对象属性,并且无法在Chunk中找到可能将其标识为链接的任何内容。 “Content”属性仅包含链接文本。
答案 0 :(得分:1)
最简单的方法是使用样式表:
Dim SS As New StyleSheet()
SS.LoadTagStyle(HtmlTags.A, HtmlTags.COLOR, "blue")
然后将其传递到HTMLWorker
对象:
Dim htmlarraylist = HTMLWorker.ParseToList(New StringReader(HtmlString), SS)
如果由于某种原因您不想这样做,您也可以在For
循环中解决它:
Dim htmlarraylist = HTMLWorker.ParseToList(New StringReader(HtmlString), Nothing)
For Each el In htmlarraylist
For Each C In el.Chunks
If C.Role.Equals(PdfName.LINK) Then
C.Font.Color = BaseColor.BLUE
End If
p.Add(C)
Next
Next