如何用PDActionJavaScript替换PDAnnotationLink的默认操作?

问题描述

我需要在文档中找到所有PDAnnotationLink,并用PDActionJavaScript替换其认操作。 最终目标是使链接在新选项卡中打开,但现在我只希望单击时显示警报。 这是测试示例:

import java.nio.file.Path;
import java.nio.file.Paths;

import org.apache.pdfBox.pdmodel.PDDocument;
import org.apache.pdfBox.pdmodel.interactive.action.PDAction;
import org.apache.pdfBox.pdmodel.interactive.action.PDActionJavaScript;
import org.apache.pdfBox.pdmodel.interactive.action.PDActionURI;
import org.apache.pdfBox.pdmodel.interactive.annotation.PDAnnotationLink;
import org.junit.Test;

/**
 *
 */
public class PdfBoxTest {

    @Test
    public void testReplaceLinks() throws Exception {

        String pathPrefix = ...path to pdf file with links...;

        Path originalPdf = Paths.get(pathPrefix + "links_test.pdf");
        PDDocument doc = PDDocument.load(originalPdf.toFile());
        doc.getDocumentCatalog().getPages().forEach(page -> {
            try {
                page.getAnnotations().forEach(pdAnnotation -> {
                    if (pdAnnotation instanceof PDAnnotationLink) {
                        PDAnnotationLink link = (PDAnnotationLink) pdAnnotation;
                        PDAction action = link.getAction();
                        if (action instanceof PDActionURI) {
                            PDActionURI uri = (PDActionURI) action;
                            PDActionJavaScript javaScript =
                                new PDActionJavaScript("app.alert(\"" + uri.getURI() + "\");");
                            // actual goal of replacing the links is to open them in a new tab/window
//                            PDActionJavaScript javaScript =
//                                new PDActionJavaScript("app.launchURL(\"" + uri.getURI() + "\",true);");
                            link.setAction(javaScript);
                        }
                    }
                });
            } catch (Throwable t) {
                throw new RuntimeException(t);
            }
        });
        Path modifiedPdf = Paths.get(pathPrefix + "links_test_mod.pdf");
        doc.save(modifiedPdf.toFile());
    }
}

,但是文档仅呈现不可单击的链接标签不显示警报)。 我肯定我在这里想念什么。
这是PDF文件链接
原版的: https://www.dropbox.com/s/notwf6yde5okh7g/links_test_orig.pdf?dl=0
改性: https://www.dropbox.com/s/bejj6rawwjrbyyc/links_test_mod.pdf?dl=0

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)