在iText中使用JavaScript查找两个字段之间的差异
我想找出在iText中使用JavaScript的两个字段之间的区别 我可以使用以下代码找到它们的总和:在iText中使用JavaScript查找两个字段之间的差异,javascript,adobe,itext,Javascript,Adobe,Itext,我想找出在iText中使用JavaScript的两个字段之间的区别 我可以使用以下代码找到它们的总和: PdfStamper stamperResult = new PdfStamper(readersectionResult, new FileOutputStream(RESULT_NEW)); stamperResult .addJavaScript("var nameField = this.getField(\"total\");"+ "nameField.setAction
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\")')");
在上面的代码中,我试图将-(负值)加到total2,这样就可以从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); }");
我更新了你的问题,因为它包含许多拼写错误。我没有编辑代码段,因为我不知道原始代码段是什么样的。在任何情况下:我认为在复制/粘贴过程中出现了一些问题,因为我不认为您的代码片段在其当前状态下编译 在任何情况下:据我所知,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();
}
注意,我使用了模糊动作。这意味着在填写
value1
字段后,只要选择另一个字段,就会触发该方法。谢谢Lowagie。我试过你建议的方法,但似乎不起作用。我在原来的问题中添加了我的更改。我也认为AF方法没有减法。我认为你们很接近。主要的区别是你还没有设定行动。所以减法的语法是正确的,但它从未被使用过。是的,我想我错过了它。请你写下如何采取行动好吗。我尝试了不同的方法,比如setAction(“MouseUp”)……但是我没有得到正确的语法。从我的头脑中,我想说您需要为value1和value2字段定义/V操作。当其中一个字段的值发生更改时,您需要触发(文档级别!)方法来计算字段总数。继续努力;这是唯一的学习方法;-)好啊我试试看。但是你能告诉我如何用JS来否定某个值吗。例如,如果用户在字段A中输入2,我想在字段B中显示-2。如果我得到这个值,我想我可以让副词工作。在这个话题上,可用的资源太少了,虽然我在学习东西,但我的日子真的很难过。
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();
}