0

我想在 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\")')"); 

在上面的代码中,我试图将 -(negative value) 添加到 total 2 中,以便从 total1 中减去它,尽管 AF 方法仍然是“SUM”。

但这不起作用。

下面的简单代码似乎有效:

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); }");
4

1 回答 1

0

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

无论如何:据我所知,AF 方法(AF 代表 Adob​​e 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();
   }

请注意,我使用了模糊动作。这意味着在填写字段后选择另一个字段时将立即触发该方法value1

于 2013-05-29T10:24:23.323 回答