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

时间:2011-05-09 08:11:36

标签: javascript html pdf javascript-events

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

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

4 个答案:

答案 0 :(得分: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;}
};

在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 };

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

this.hostContainer.postMessage(["urlClicked", "http://blah.blah.blah..."]);

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

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

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

你甚至可以抽出所有现有的链接并让PDF请求通过包装HTML页面打开链接......这样你就可以给出新的Windows名称,从JS关闭它们等等。你可以下来对时髦的。

但您必须能够更改PDF。

答案 1 :(得分:1)

您的链接可能在PDF文件中表示为“链接注释”。 PDF中的注释可以包含“附加操作”,您可以使用pdf处理软件,如iText(免费用于非商业用途)或Amyuni PDF Creator(商业,通常的免责声明应用程序)将Javascript操作添加到链接的“附加操作”集合。您可以使用此Javascript代码在服务器中调用页面或方法。

答案 2 :(得分:-2)

客户方:

<a href="yourpdf.pdf" id="pdf-link">PDF</a>

$("#pdf-link").click(function(){
   $.post('yoursite.com/phpfunctionpage/notifyPdf',
          {event:'pdf'},
          function(response){
              alert(response['message']);
          }, 'json'
   );
});

您的服务器端:

function notifyPdf(){
   $event = $_POST['event'];
   if ($event == 'pdf'){
     // handle notification here
     echo json_encode(array('result'=>1, 'message'=>'notifiation successful'));
   }
}

答案 3 :(得分:-3)

<a href="file.pdf" onclick:'javascriptFunction();'>Open the pdf file</a>

<script>

function javascriptFunction(){

}

</script>