java - 将部分数据标记为超链接、iText

标签 java itext

我有一个段落(来自数据库表),其中可能包含网址(例如 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 matchingregular expressions ,取决于需要的彻底程度。

一旦确定了 String 的哪一部分是 URL,您可以将其分为 3 部分:BeforeURL 和 < 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 查看器中禁用自动超链接,以便您可以检查链接注释是否确实存在。在 Adob​​e Acrobat 中,您可以在常规首选项 Pane 中执行此操作:取消选中“从 URL 创建链接”。

关于java - 将部分数据标记为超链接、iText,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33011572/

相关文章:

通过 MakeSignature.signDeferred 进行外部签名时,Java iText 5 签名无效

java - 从 OpenPDF 获取溢出文本

java - 奇怪的 Tomcat 8 部署行为

java - 用户名包含 Twitter API 中使用 Java 的特定单词

java - 如何在 JDA 中编辑嵌入

java - com.lowagie 包应该导入到 iText 的哪个版本?

java - 生成行下双列的表格

java - 如何在我的 Activity 本身中使用 Bottom tabActivity

java - EV 代码签名极慢

java - Flying Saucer (xhtmlrenderer)内存不足