2014-06-12 60 views
1

我收到了一个嵌入在主页中的大型PDF,并且应该与其中的自定义JavaScript命令进行交互链接。如何将Javascript添加到PDF超链接

本文档应该由一些学生维护,他们不可能通过所有网站并在原始单词文件更改后设置javascript命令。所以我希望他们在应该发生行为的单词中设置超链接。

之后,我想删除iTextSharp的超链接,并设置一个JavaScript动作。

我可以用HTML沟通,找到正确的超链接,并可以在此post

改变他们的网址一样也试过把它添加到注释动作:

 string destination = AnnotationAction.GetAsString(PdfName.URI).ToString(); 
    AnnotationAction.Put(PdfName.JAVASCRIPT, new PdfString("this.hostContainer.postMessage(\"" + destination + "\");")); 

但它始终是调用原始的超链接在执行javascript之前。那么,如何删除超链接而不会丢失文档内文本的形成?

+1

我不明白任何人都不敢对这个问题进行投票。这个问题很清楚,写得很好。 – yms

+0

我习惯于这样的行为。在我看来,那些压低问题的人应该被迫输入一个理由。因为这是确保质量保证和阻止无知的选民的唯一途径。 –

回答

3

您只需要将/S的值更改为/JAVASCRIPT并将您的JavaScript命令设置为值/JS即可。但是,我不是在改变事物,而是为了确保没有任何行李,而只是吹走原来的行动并创建一个新的行动。

下面的前三行来自我链接的原始答案,之后我杀掉了URL更改代码并用JavaScript代码代替它。既然你理解我的另一篇文章,这也应该是有意义的。

//Make sure this annotation has an ACTION 
if (AnnotationDictionary.Get(PdfName.A) == null) 
    continue; 

//Remove our old action entry just so nothing weird hangs around 
AnnotationDictionary.Remove(PdfName.A); 

//Create a new action entry 
var a = new PdfDictionary(PdfName.A); 

//Set it as an action 
a.Put(PdfName.TYPE, PdfName.ACTION); 

//Set it as JavaScript 
a.Put(PdfName.S, PdfName.JAVASCRIPT); 

//Set the JavaScript 
a.Put(PdfName.JS, new PdfString(@"app.alert('Hello World');")); 

//Add it back to the annotation 
AnnotationDictionary.Put(PdfName.A, a); 
+0

谢谢,你真棒!完美的作品! 只是另一个问题:PdfName.JAVASCRIPT和PdfName.JS有什么区别?为什么要使用一次,一次使用一次? –

+0

'/ S'是定义字典代表什么类型动作的字典。这个值通常是冗长和描述性的,例如'/ ResetForm','/ GoTo3DView'和'/ JavaScript'。根据动作类型的不同,可以找到更多的条目,这些条目通常比较简洁,比如'/ F','/ D'和'/ JS'。如果您将字典作为问答阅读,那么将会是“这是什么类型的操作?JavaScript。好的,您希望我执行什么JavaScript?