2013-05-28 16 views
0

我想在iText中使用JavaScript查找两个字段之间的区别。使用iText中的JavaScript查找两个字段之间的差异

我能够找到它们的使用下面的代码的总和:

PdfStamper stamperResult = new PdfStamper(readersectionResult, new FileOutputStream(RESULT_NEW)); 

    stamperResult .addJavaScript("var nameField = this.getField(\"total\");"+ "nameField.setAction(\"Calculate\",'AFSimple_Calculate(\"SUM\",\"total1\", \"total2\")')"); 

有没有办法找出使用差异“AFSimple_Calculate”相似,我在上面的代码片断做?

感谢您的编辑!我尝试了您的建议,但由于某种原因,它似乎不起作用。

stamperResult.addJavaScript(" var total1 = this.getField(\"value1\"); var total2 = this.getField  (\"value2\"); var subtr = this.getField(\"total\"); subtr.value = total1.value - total2.value;");       

我用空格分隔换行符并添加右转义字符。

我还想到使用AF方法使用不同的逻辑来减法的:这样

stamperResult.addJavaScript("var nameField = this.getField(\"total\");"+ "nameField.setAction(\"Calculate\",'AFSimple_Calculate(\"SUM\",\"total1\", \"-total2\")')"); 

在上面的代码我试图添加 - (负的值)与总2,从而,这将是尽管AF方法仍然是'SUM',但从total1中减去。

但这并不奏效。

下面简单的代码似乎工作:

stamperResult.addJavaScript("var nameField = this.getField('total');" + 
     "nameField.setAction('Calculate'," + 
     "'subtract()');" + 
     "" +"function subtract(){this.getField('total').value   
          = (this.getField('total_1').value -this.getField('total_2').value); }"); 

回答

0

我更新了你的问题,因为它包含了许多拼写错误。我没有编辑代码片段,因为我不知道原始代码段是什么。在任何情况下:我认为在复制/粘贴过程中出现问题,因为我认为你的代码片段不能编译为当前状态。

在任何情况下:据我所知,AF方法(AF代表Adobe Forms)可能不会出现在每个查看器中,并且就我所知Adobe并未实施从数值中减去值的方法彼此在AFSimple_Calculate方法中。

由于这两个原因,您可能更喜欢普通的JavaScript,而不是使用可能或可能不是预先封装的预先封装的函数。

这种常规的JavaScript可能看起来像这样:

var total1 = this.getField("total1"); 
var total2 = this.getField("total2"); 
var subtr = this.getField("difference"); 
subtr.value = total1.value - total2.value; 

我不知道是否回答你的问题。也许你只是想:

var total1 = this.getField("total1"); 
var total2 = this.getField("total2"); 
var namefield = total1.value - total2.value; 

您可以使用正确的转义字符和空格或换行字符替换换行符把这些线在字符串中。

当然,您需要在某处触发此代码。在下面你会发现一个例子,将value1字段内容的负值放入value2字段。

public static void main(String[] args) throws IOException, DocumentException { 
     Document document = new Document(); 
     PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("js.pdf")); 
     document.open(); 
     writer.addJavaScript("function makeNegative() { this.getField('value2').value = -(this.getField('value1').value); } "); 
     Rectangle rect1 = new Rectangle(40, 740, 200, 756); 
     TextField value = new TextField(writer, rect1, "value1"); 
     value.setBorderColor(GrayColor.GRAYBLACK); 
     value.setBorderWidth(0.5f); 
     PdfFormField field = value.getTextField(); 
     field.setAdditionalActions(PdfName.BL, PdfAction.javaScript("makeNegative();", writer)); 
     writer.addAnnotation(field); 
     Rectangle rect2 = new Rectangle(40, 710, 200, 726); 
     TextField neg = new TextField(writer, rect2, "value2"); 
     neg.setBorderColor(GrayColor.GRAYBLACK); 
     neg.setBorderWidth(0.5f); 
     writer.addAnnotation(neg.getTextField()); 
     document.close(); 
    } 

请注意,我使用了Blur动作。这意味着只要在填写value1字段后选择了其他字段,方法就会被触发。

+0

感谢Lowagie。我尝试了你所建议的方式,但似乎并不奏效。我在原始问题中添加了我的更改。 我也认为AF方法没有减法。 – user2296988

+0

我觉得你很接近。主要的区别是你还没有设置动作。所以减去的语法是正确的,但它从来没有用过。 –

+0

是的,我想我很想念它。你能否写下如何设置一个行动。我尝试了不同的方式,如setAction(“MouseUp”)...但我没有得到正确的语法。 – user2296988

相关问题