问题描述
我需要在文档中找到所有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 (将#修改为@)