我正在尝试使用iTextSharp将文档级JavaScript函数添加到PDF文档中。我根据我发现的一些文档,通过PdfStamper将该函数添加到文档中。这条线特别是:
_pdfResultStamper.JavaScript = GetJS();
GetJS只返回我从我在Acrobat Pro中编写的原型函数中复制的JavaScript字符串。这不是确切的功能,但它足够接近我想要做的事情:
public string GetJS()
{
return "function sayHello(fieldObj){" +
"app.alert(fieldObj.value);" +
"}";
}
当我打开生成的PDF时,我在文档JS中的任何地方都看不到此功能(即使我在Acrobat中选择“编辑所有JavaScripts”)。
稍后我会在PDF表单中添加几个复选框,并绑定到他们的mouseup事件以调用sayHello。此代码确实按预期添加到PDF中。
PdfFormField Field = checkbox.CheckField;
Field.Action = PdfAction.JavaScript("sayHello(event.target);", _pdfResultStamper.Writer);
然而,没有任何事情发生(显然),因为全局/文档级别功能不存在。
如何在文档级添加sayHello函数,以便所有复选框都可以调用它?我尝试了其他几种方法,似乎没有任何东西可以将全局函数写入生成的PDF。
答案 0 :(得分:0)
您在哪里找到该文档?你查过官方文件了吗?
我为我的书写了一个AddJavaScriptToForm示例。在该示例中,使用addJavaScript()
方法。当您使用iTextSharp(C#)而不是iText(Java)时,您需要咨询the official C# examples。您需要或多或少地调整相关行:
_pdfResultStamper.Writer.AddJavaScript(GetJS());
答案 1 :(得分:0)
所以我认为我的情况因我们构建PDF文档的方式而变得复杂。简而言之,我们正在构建几个PdfStamper对象,通过模板绑定过程运行压模以填充字段并格式化一些内容,将压模转储到内存流集合中,然后使用PdfCopy将流合并为一个PDF文档,使用PdfCopy与每个内存表示PDF中的一个页面的流。我认为将PDF添加到PdfStamper时,我们将PDF页面复制到实际文档中时会丢失。不过这是假设。我在合并到一个文档时使用PdfCopy.AddJavaScript()函数解决了这个问题。