使用iTextSharp将文档级JavaScript添加到PdfResultStamper

时间:2013-12-10 19:27:59

标签: pdf itextsharp itext

我正在尝试使用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。

2 个答案:

答案 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()函数解决了这个问题。