关于itext:ITextPDF-使用PDFAnnotation创建链接

ITextPDF - Link creation with PDFAnnotation

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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);
    }
}

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

您的客户(可能也应该是我们的客户)可能被以下概念所迷惑:

额外动作

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

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

备用栏位名称

还有一个/TU条目(以前称为用户名条目),这是(我引用规范)一个替代的字段名,该字段名将代替实际的字段名,无论在用户界面中标识该字段的位置如何(例如在错误或状态消息中引用该字段)。在提取文档内容以支持残障用户或其他目的时,此文本也很有用。观众经常使用/TU条目的值作为工具提示,但是正如您可以从描述中看出的那样,/TU条目是针对字段而不是注释的。它只能在字段字典中使用,不能在注释字典中使用。

结论:

规范中没有描述当有人将鼠标悬停在链接注释上时显示的内容。当用户将鼠标悬停在链接注释上时,PDF查看器的每个供应商都可以决定显示什么(如果有)。无法将任何内容添加到PDF中,以迫使查看器显示其他内容(或什么也不显示)。