DeX*_*eX3 7 html javascript pdf javascript-events
我在我的页面中嵌入了一个PDF,并且我想设置类似javascript-callback的东西,只要用户点击PDF中的链接就可以调用它.
有没有办法实现这个目标?
如果您查看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.