ITextPDF - 使用PDFAnnotation创建链接

时间:2016-10-03 22:37:26

标签: itext

我对使用itext创建的pdf文档中的超链接有疑问。目前,使用以下用java编写的代码,我能够成功创建链接。但是,当我将鼠标悬停在链接上时,会显示链接文本。客户端不希望在悬停时显示链接文本。如何删除悬停,或者显示替代文字(例如“课程信息”)?我使用的是itext版本5.5.9。我已经看过第7章中的“iText in Action”,但未能找到我需要的东西。有没有更好的方法来创建链接?任何帮助和示例将不胜感激。感谢。

package edu.ucsd.act.academic.studente2t.util;

import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.PdfAction;
import com.itextpdf.text.pdf.PdfAnnotation;
import com.itextpdf.text.pdf.PdfBorderArray;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPCellEvent;
import com.itextpdf.text.pdf.PdfWriter;

class LinkInCellEvent implements PdfPCellEvent
{
    protected String url;

    public LinkInCellEvent(String url)
    {
        this.url = url;
    }

    public void cellLayout(PdfPCell cell, Rectangle position, 
          PdfContentByte[] canvases)
    {
        PdfWriter writer = canvases[0].getPdfWriter();
        PdfAction action = new PdfAction(url);
        PdfAnnotation link = PdfAnnotation.createLink(writer, position,
        PdfAnnotation.HIGHLIGHT_INVERT, action);
        PdfBorderArray border = new PdfBorderArray(0, 0, 0);
        link.setBorder(border);
        writer.addAnnotation(link);
    }
}

1 个答案:

答案 0 :(得分:1)

这不是iText问题。它是PDF固有的。 PDF规范(ISO-32000-1)没有说明观众应该如何提供链接注释的工具提示。

您的客户(可能也应该是我们的客户)可能会对以下概念感到困惑:

其他行动

唯一出现的单词"工具提示"在有关其他操作的部分中描述了E(输入)和X(退出)事件时,处于注释中。可以使用其他操作(例如在窗口小部件注释上),以便在有人将鼠标悬停在窗口小部件注释上时显示/消失自定义工具提示。

当您学习PDF标准时,您会发现有几个实例可以定义其他操作(/AA),但链接注释不是其中之一。

替代字段名称

还有/TU条目(以前称为用户名条目),这是(我引用规范)一个替代字段名称在用户界面中识别字段的任何地方(例如错误或引用该字段的状态消息),用于代替实际字段名称。在提取文档内容以支持残疾用户或其他目的的可访问性时,此文本也很有用。 /TU条目的值通常被观看者用作工具提示,但是当你从描述中可以看出,/TU条目特定于字段,而不是注释。它只能用于字典字典,而不能用在注释字典中。

<强>结论:

当某人悬停在链接注释上时显示的内容未在规范中描述。当用户将鼠标悬停在链接注释上时,PDF查看器的每个供应商都可以决定要显示的内容(如果有的话)。无法在PDF中添加可以强制观看者显示其他内容(或什么都没有)的内容。