我得到了一个大的 PDF,它嵌入在主页中,应该有带有自定义 javascript 命令的交互式链接。
本文档应该由一些同学维护,他们不可能在原始word文件发生变化后遍历所有站点并设置javascript命令。所以我希望他们在应该发生操作的地方设置超链接。
之后我想用 iTextSharp 删除超链接并改为设置 javascript 操作。
我可以与 HTML 通信,正确找到超链接并且可以像这样更改它们的 url post
还尝试将此添加到注释操作中:
string destination = AnnotationAction.GetAsString(PdfName.URI).ToString();
AnnotationAction.Put(PdfName.JAVASCRIPT, new PdfString("this.hostContainer.postMessage(\"" + destination + "\");"));
但它总是在执行 javascript 之前调用原始超链接。那么如何在不丢失文档中文本格式的情况下删除超链接呢?
最佳答案
您只需要将/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);
关于c# - 如何将 Javascript 附加到 PDF 超链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24186449/