java - 如何用 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
解决方案
推荐阅读
- c++ - 如何将源代码中的长字符串拆分为多行以提高 C++ 的可读性?
- javascript - Rails 6,Webpacker 以错误的顺序编译 javascript 文件
- html - 如何围绕响应式 CSS 侧边栏包装内容(包括图像)
- kubernetes - Azure Kubernetes 服务:使用 NGINX 入口控制器和基于 Ocelot 的 API 网关
- javascript - 导入json数据时VueJS编译失败
- python - 使用 beautifulsoup、请求和正则表达式的 Web 抓取程序中的语法错误
- statistics - 如何从此函数获得一致的返回类型?
- javascript - 从 HTML Canvas 捕获图像的最快方法
- java - 按标准排序的 5 个项目的分组
- java - 使用 Firestore 的 Android 加入查询