我有一个段落(来自数据库表),其中可能包含网址(例如 www.google.com)。在生成的 PDF 文档中,它会自动表现为超链接(具有可点击操作的手形光标)。 有没有办法将其标记为超链接?
我之前使用以下代码创建并标记为超链接:
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);
但这适用于静态文本。 相关段落可能包含链接,也可能不包含链接。 如何解决这种情况?
最佳答案
当您从数据库获取段落文本时,我假设您有一个String
。您可以简单地检查该 String
是否包含 URL,例如使用基本String matching或regular expressions ,取决于需要的彻底程度。
一旦确定了 String
的哪一部分是 URL,您可以将其分为 3 部分:Before、URL 和 < em>之后。然后使用您之前使用过的代码将超链接创建为 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 段内的多个超链接,只需对 After 文本再次执行相同的操作即可。
为了进行测试,您可能需要在 PDF 查看器中禁用自动超链接,以便您可以检查链接注释是否确实存在。在 Adobe Acrobat 中,您可以在常规首选项 Pane 中执行此操作:取消选中“从 URL 创建链接”。
关于java - 将部分数据标记为超链接、iText,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33011572/