用户单击嵌入PDF中的链接时收到通知

DeX*_*eX3 7 html javascript pdf javascript-events

我在我的页面中嵌入了一个PDF,并且我想设置类似javascript-callback的东西,只要用户点击PDF中的链接就可以调用它.

有没有办法实现这个目标?

Mar*_*rer 7

如果您查看Acrobat JS Reference以获得要支持的最低版本,您将看到HostContainer对象的文档.

在PDF中:

this.hostContainer.messageHandler =
{
  onMessage: function(messageArray)
  {
    for(var i = 0; i < messageArray.length; i++)
      console.println("Message " + i + ": " + messageArray[i]);
  },
  onError: function(error, messageArray){ },
  onDisclose: function() {return true;}
};
Run Code Online (Sandbox Code Playgroud)

在HTML中,假设您的PDF位于<object id="thePdf">标记内:

function messageFunc(messageArray) {
    for(var i = 0; i < messageArray.length; i++)
      alert("Message " + i + ": " + messageArray[i]);
}

document.getElementById("thePdf").messageHandler = { onMessage: messageFunc };
Run Code Online (Sandbox Code Playgroud)

在PDF中,您还需要修改链接,以便他们有一个JS操作,将消息发布到包含的网页.这可以通过编程方式完成(根据您使用的语言/库而变化很大),或者在Acrobat Pro中手动完成.

this.hostContainer.postMessage(["urlClicked", "http://blah.blah.blah..."]);
Run Code Online (Sandbox Code Playgroud)

不是很难,但没有人听说过它.如果在未来几年内在Adobe查看器(Reader/Acrobat)之外的任何地方工作,我会感到震惊.

如果您出于某种原因要将HTML中的消息发送到PDF,它会是这样的:

var thePDF = document.getElementById("thePdf");
thePDF.postMessage(["This", "is", "an", "array", "too."]);
Run Code Online (Sandbox Code Playgroud)

您甚至可以将所有现有链接拉出来并让PDF请求通过包装HTML页面打开链接...这样您就可以给出新窗口名称,从JS关闭它们等等.您可以正确地使用它.

但您必须能够更改PDF.