我的iText RemoteGoto没有跳转到正确的目的地

时间:2015-11-03 14:11:49

标签: hyperlink itext goto

在我的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阅读器阻碍查找目的地的内容是什么?

1 个答案:

答案 0 :(得分:0)

有两种方法可以在PDF中描述命名目的地:

  1. 您可以使用PDF字符串定义目标(自PDF 1.2起首选),
  2. 使用PDF名称(PDF 1.1中的原始文件)定义目的地。
  3. 在您的情况下,创建一个名称树,将目标存储为PDF字符串:

    enter image description here

    你看到foo_section_2了吗?这显然是一个PDF字符串。您正在使用首选方法来定义命名目标,因为setLocalDestination()在iText中以这种方式编程。

    但是,您使用的PdfAction.gotoRemotePage()方法不完整。根据您的PDF,我假设您使用PDF名称(/foo_section_2)创建对指定目的地的引用:

    enter image description here

    您可以看到/foo_section_2是一个名称,因为它以/开头。没有使用目标文件中的名称定义的命名目标,因此无法找到目标。

    您应该使用gotoRemotePage()方法,如下所示:

    PdfAction.gotoRemotePage(externalFile, externalLinkPrefix + entity.getIdentifier(),
        false, true)
    

    gotoRemotePage()方法的第三个参数应为false,以确保您创建指向使用PDF字符串而不是PDF名称的命名目标的链接(可能就是您的'重做)。

    出于某种原因,Acrobat认为grunddaten没有任何命名目的地:

    enter image description here

    当我查看导航选项卡时,这已得到确认,但当我尝试添加命名目标时,我得到“读取此文档时出现问题(15)。”我不知道15指的是什么。

    enter image description here

    运行预检,我得到更多信息:

    enter image description here

    这告诉我NameTreeRoot没有正确构造。我将不得不调查什么是错的。它在我创建具有命名目标的文档时有效,请参阅RemoteGoto。我刚刚测试了它并运行了Preflight,它运行得很好。我不知道你的文件出了什么问题......