2014-06-12 92 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?