2015-10-08 58 views
1

我有一段(來自數據庫表),其中可能包含網址(,例如www.google.com)。在生成的PDF文檔中,這會自動運行,就好像它是一個超鏈接(帶有可點擊操作的手形光標)。 有沒有辦法將其標記爲超鏈接?標記部分數據爲超鏈接,iText

我以前創建並使用下面的代碼標記爲超鏈接:

Chunk c = new Chunk("www.google.com", font); 
PdfAction action = new PdfAction("www.google.com"); 

PdfAnnotation annotation = PdfAnnotation.createLink(writer,new Rectangle(0, 0), PdfName.HIGHLIGHT, action); 
annotation.put(PdfName.CONTENTS,new PdfString("www.google.com")); 
annotation.setBorderStyle(new PdfBorderDictionary(0,PdfBorderDictionary.STYLE_BEVELED)); 
c.setAnnotation(annotation); 

但是,這是一個靜態文本。 有問題的段落可能包含鏈接或可能不包含鏈接。 如何解決這種情況?

+0

僅供參考,「文本自動轉換爲超鏈接」實際上是Adobe產品的一項功能,並不保證是其他產品的功能。您可以通過轉到編輯>首選項>常規>「從URL創建鏈接」來禁用它。根據[這篇博客文章](http://blogs.adobe.com/acrolaw/2013/03/removing-hyperlinks-from-a-pdf-and-featuregotcha/),這些自動鏈接仍然會被創建,即使你手動創建一個註釋,但是它們將有效地在註釋後面進行z-索引,並且不會產生任何影響。 –

回答

2

當您從數據庫中獲取段落文本時,我假設您有String。您只需檢查String是否包含網址(例如,使用基本的String matchingregular expressions,這取決於它需要多麼徹底。

一旦你確定其String的部分是URL,可以將其分爲3個部分分爲:之前URL後。然後使用您以前用來創建超鏈接爲Chunk的代碼,並在結合了3份Paragraph

Chunk before = new Chunk("Before "); 
Chunk c = new Chunk("www.google.com"); 
Chunk after = new Chunk(" After"); 
// create link annotation for c 
Paragraph p = new Paragraph(); 
p.add(before); 
p.add(c); 
p.add(after); 

如果你想1款內處理多個超鏈接,簡單地做同樣的事情再次爲之後文字。

對於測試,您可能希望在您的PDF查看器中禁用自動超鏈接,以便您可以檢查鏈接註釋是否真的存在。在Adobe Acrobat中,您可以在通用偏好設置面板中執行此操作:取消選中「從網址創建鏈接」。