2014-01-15 37 views
0

我正在使用iTextSharp從包含在數據庫中的數據生成PDF。有一個文本字段使用HTML格式。我發現下面的代碼將HTML塊插入到段落中。如何在iTextSharp中設置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中找到可能將其標識爲鏈接的任何內容。 「內容」屬性僅包含鏈接文本。

回答

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 
+0

樣式表正是我所在的尋找。 iTextSharp沒有很多文檔。另外,我的Chunk對象沒有Role屬性。這只是在最新版本? – Hypersapien

+0

我不是100%確定角色是如何設置的,或者是否有版本要求。我可以在5.4.2中看到它,但可能是因爲我的示例HTML非常簡單。 –

+0

我剛升級到最新版本,現在就在那裏。 – Hypersapien

相關問題