如何使用PDFBox创建一个转到*上一个视图*的链接?

时间:2015-01-21 06:26:14

标签: java pdf pdfbox acrobat

通过使用PDFBox,可以使用PDPageDestination轻松创建指向特定页面或页面视图的链接。例如,以下代码将创建一个转到第9页的链接:

PDAnnotationLink link         = new PDAnnotationLink();
PDPageDestination destination = new PDPageFitWidthDestination();
PDActionGoTo action           = new PDActionGoTo();

destination.setPage(document.getPage(9));
action.setDestination(destination);
link.setAction(action);

问题:
我想转到之前的视图

,而不是去特定页面

例如,假设在PDF文件中,P.1和P.2中的每一个都有一个转到P. 9的链接。现在我想在P. 9上添加一个回到用户所在位置的链接开始。

如果用户在P.1开始并点击了P.9的链接,则他到达P.9。当他点击第9页的链接时,他将回到P.1,他来自哪里。但如果他从P.2开始,那么P.9的链接将返回到P.2。

问题:如何使用PDFBox实现此目的?

仅供参考,使用Adobe Acrobat,可以通过添加"执行菜单项"来实现。对链接的操作,然后选择"上一个视图"作为菜单项,如此屏幕截图所示:

Link to Acrobat screenshot

2 个答案:

答案 0 :(得分:3)

在蒂尔曼的指导下,我设法解决了自己的问题。

我找不到一个能够添加"命名动作"的PDAction子类,所以我创建了自己的子类," PDActionNamed":

class PDActionNamed extends PDAction {

    public static final String SUB_TYPE = "Named";    

    public PDActionNamed() {
        super();
        setSubType( SUB_TYPE );
    }

    public void setN( String s ) {
        action.setName( "N", s );
    }
}

使用子类

PDAnnotationLink link   = new PDAnnotationLink(); 
PDActionNamed action = new PDActionNamed ();
action.setN("GoBack");    // this is one of Acrobat's default named action
link.setAction(action);

它甚至可以在非Javascript支持的PDF阅读器上运行(例如SumatraPDF)。

答案 1 :(得分:1)

你所谈论的是观众依赖的行动;我认为没有办法一般地做到这一点,但应该有办法在Adobe Acrobat / Adob​​e Reader中做到这一点。

一种方法是插入一个触发Action的链接。该操作可能是一个Javascript操作,Javascript可能相对简单,因为Acrobat Javascript API包含一个名为“goBack”的“app”方法。

因此,请立即插入链接。不插入GoTo操作,而是插入Javascript操作。并将Javascript设置为:“app.goBack()”。

这应该适用于Acrobat(他们在Acrobat Javascript API参考中有一个类似的例子,带有一个按钮表单字段。问题是它是否也适用于其他观众,因此是否能满足您的商业案例。