2013-12-10 40 views
0

我正在尝试使用iTextSharp将文档级JavaScript函数添加到PDF文档。我通过我发现的一些文档通过PdfStamper将该函数添加到文档中。该行特别是:使用iTextSharp将文档级JavaScript添加到PdfResultStamper

_pdfResultStamper.JavaScript = GetJS(); 

GetJS只是返回从我在Acrobat Pro中编写的原型函数复制的JavaScript字符串。这是不准确的功能,但它足够接近得到我在做什么的想法:

public string GetJS() 
{ 
    return "function sayHello(fieldObj){" + 
       "app.alert(fieldObj.value);" + 
      "}"; 
} 

当我打开生成的PDF我没有看到这个功能的JS文件(甚至当我选择在任何地方“在Acrobat中编辑所有JavaScript”)。

稍后,我将几个复选框添加到PDF表单并绑定到它们的mouseup事件以调用sayHello。按预期将此代码添加到PDF中。

   PdfFormField Field = checkbox.CheckField; 
       Field.Action = PdfAction.JavaScript("sayHello(event.target);", _pdfResultStamper.Writer); 

但是没有任何反应(显然),因为全局/文档级别函数不存在。

如何在文档级别添加sayHello函数以便所有复选框都可以调用它?我尝试了其他一些方法,似乎没有将全局函数写入生成的PDF。

+0

*当我们将PDF页面复制到实际文档时,它正在丢失。这是假设,虽然* - 听起来很合理......'PdfCopy'复制页面范围,但不是文档级别的JavaScript。 – mkl

回答

0

你从哪里找到该文档?你有没有检查官方文件?

我已经为我的书写过一个AddJavaScriptToForm的例子。在那个例子中,使用addJavaScript()方法。由于您使用iTextSharp(C#)而不是iText(Java),因此您需要咨询the official C# examples。你需要或多或少地修改相关行:

_pdfResultStamper.Writer.AddJavaScript(GetJS()); 
+0

这是我看过的例子之一。坦白说,我看了很多例子,他们似乎都有相同的方法,无论是_pdfResultStamper.JavaScript = GetJS()还是_pdfResultstamper.Writer.AddJavaScript(GetJS()),但它们都不起作用。例如:http://kuujinbo.info/iTextInAction2Ed/index.aspx?ch=Chapter13&ex=AddJavaScriptToForm。我最终通过添加JS通过PdfCopy.AddJavaScript函数调用解决它。 –

+0

我很抱歉听到这个消息。它在Java中适用于我。 –

0

所以我认为我的情况是如何构建我们的PDF文档。简而言之,我们构建了几个PdfStamper对象,通过模板绑定过程运行压模,以填充字段和格式化一些内容,将压模转储到内存流集合中,然后使用PdfCopy将流合并到一个PDF文档中,每个内存使用PdfCopy流代表PDF中的一个页面。我认为,当将JavaScript添加到PdfStamper时,我们将PDF页面复制到实际文档中时丢失了它。不过,这是假设。我通过在合并到一个文档中时使用PdfCopy.AddJavaScript()函数解决了该问题。

相关问题