在我的iText文档中,我正在写一些关于我的实体的文本,该文本将引用另一个PDF文档中的出现。 使用iText有多种方法:
static String externalLinkPrefix = "external_entity_";
String externalFile = "anotherPdf.pdf";
Chunk entity = new Chunk("name");
// use the plain remoteGoto() method
chunk.setRemoteGoto(externalFile, externalLinkPrefix + entity.getIdentifier());
// or use the PdfAction
chunk.setAction(PdfAction.gotoRemotePage(externalFile, externalLinkPrefix + entity.getIdentifier(), false, true);
// later on create the destination in the other file
Paragraph entityReference = new Paragraph(new Chunk("name")
.setLocalDestination(externalLinkPrefix + entity.getIdentifier());
然而,当我点击创建的链接时,它会将我带到第二个文档的开头,表示它没有找到目的地。
我仔细检查了链接“密钥”是否相同而且它们是。
iText或PDF阅读器阻碍查找目的地的内容是什么?
答案 0 :(得分:0)
有两种方法可以在PDF中描述命名目的地:
在您的情况下,创建一个名称树,将目标存储为PDF字符串:
你看到foo_section_2
了吗?这显然是一个PDF字符串。您正在使用首选方法来定义命名目标,因为setLocalDestination()
在iText中以这种方式编程。
但是,您使用的PdfAction.gotoRemotePage()
方法不完整。根据您的PDF,我假设您使用PDF名称(/foo_section_2
)创建对指定目的地的引用:
您可以看到/foo_section_2
是一个名称,因为它以/
开头。没有使用目标文件中的名称定义的命名目标,因此无法找到目标。
您应该使用gotoRemotePage()
方法,如下所示:
PdfAction.gotoRemotePage(externalFile, externalLinkPrefix + entity.getIdentifier(),
false, true)
gotoRemotePage()
方法的第三个参数应为false
,以确保您创建指向使用PDF字符串而不是PDF名称的命名目标的链接(可能就是您的'重做)。
出于某种原因,Acrobat认为grunddaten没有任何命名目的地:
当我查看导航选项卡时,这已得到确认,但当我尝试添加命名目标时,我得到“读取此文档时出现问题(15)。”我不知道15指的是什么。
运行预检,我得到更多信息:
这告诉我NameTreeRoot没有正确构造。我将不得不调查什么是错的。它在我创建具有命名目标的文档时有效,请参阅RemoteGoto。我刚刚测试了它并运行了Preflight,它运行得很好。我不知道你的文件出了什么问题......