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

问题描述 投票:2回答:2

通过使用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

java pdf pdfbox acrobat
2个回答
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
投票

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.