java - 如何使用 PDFBox 创建转到*上一 View *的链接?

标签 java pdf pdfbox acrobat

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

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

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

问题:
我不想转到特定页面,而是转到上一个 View

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

如果用户从 P.1 开始并单击指向 P.9 的链接,他将到达 P.9。当他点击第 9 页上的链接时,他将返回到他来自的第 1 页。但如果他从 P.2 开始,那么 P.9 的链接将返回到 P.2。

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

仅供引用,使用 Adob​​e Acrobat,这可以通过向链接添加“执行菜单项”操作,然后选择“上一个 View ”作为菜单项来实现,如以下屏幕截图所示:

Link to Acrobat screenshot

最佳答案

在 Tilman 的指导下,我成功解决了自己的问题。

我找不到能够添加“命名操作”的 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)上工作。

关于java - 如何使用 PDFBox 创建转到*上一 View *的链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28060866/

相关文章:

java - 什么是 Weka 中修剪过的和未修剪过的树?

eclipse - 在 Eclipse 中导入库?

java - JUnit 类别不会运行某些测试

pdf - 是否可以使用 Coldfusion 8 从 PDF 文件创建缩略图?

java - 如何正确加密合并的pdf文档

java - 从文件中读取数字,乘以2,写入文件(JAVA)

bash - Imagemagick recognize -verbose 报告的文件大小与 ls -l 截然不同

pdf - 日期字符串的正确格式是什么?

java - 使用 Apache POI 和 Apache PDFBox 阅读 doc、pdf 文件时文本框位置错误

pdf - 如何解释 "marked-content"运算符MP、PD、BMC、BDC和EMC